2013-05-06 84 views
0

嗨我想要取得列9结果对应于第2列中以4.4开头的第一个点。这是迄今为止我所拥有的。Awk到最接近的匹配

echo $(awk "$2 ~ /4.4*/ {print $9}" 'myfile') >>"myoutputfile" 

不幸的是,这在语法上是不正确的,但我看不出如何解决它。 任何帮助将不胜感激。 谢谢。

+1

'echo $(...)'完全是多余的。 http://partmaps.org/era/unix/award.html#backticks – tripleee 2013-05-06 16:50:26

回答

5

正确的语法是:

awk '$2~/^4\.4/{print $9}' myfile >> myoutputfile 

这将第九场附加在myfilemyoutputfile如果第二场正则表达式匹配^4\.4。如果第二个字段以^ a 4开头,后跟.后跟4,则正则表达式匹配。

注:

  • >>是追加操作,如果你只想myoutputfile包含从awk命令的输出使用重定向操作>这将文件第一。

  • awk默认打印到stdout,使用反引号和echo不是必需的。

  • awk脚本应该只包含在单引号中,这些文件不需要引用。

编辑:

只返回使用exit退出该脚本的第一场比赛:

awk '$2~/^4\.4/{print $9;exit}' myfile 
+0

+1现在我同意你的答案=>与我的相同;-) – olibre 2013-05-06 16:53:47

+0

谢谢大家,有没有办法只返回第一场比赛。 – wookie1 2013-05-06 16:56:10

+0

@ wookie1使用'exit'语句。 – 2013-05-06 16:57:35

2
awk '$2 ~ /^4[.]4/ {print $9}' myfile >> myoutputfile 

符号^意味着列的开端。

1

开始于4.4

应该是/^4\.4.*/

这样:

awk '$2~/^4\.4.*/{print $9}' myfile >> myoutputfile 

一些示例/解释:

4.4* matches foo4x4, foo4x4444 ... 
^4\.4* matches 4.4, 4.44444, also 4. ... but not 4.45850 
^4\.4.* (same as ^4\.4) matches 4.4, 4.4444, 4.45567 and 4.4abcde 

如果您只希望有以下号码4.4,请使用:

/^4\.4[0-9]*$/