Awk到最近的比赛

时间:2013-05-06 16:43:54

标签: bash shell awk

您好我正在尝试将第9列结果与第2列中以4.4开头的第一个点相对应。这是我到目前为止所拥有的。

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

不幸的是,这在语法上是不正确的,但我看不出如何修复它。 任何帮助将非常感激。 感谢。

3 个答案:

答案 0 :(得分:5)

正确的语法是:

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

如果第二个字段与正则表达式myfile匹配,则会将myoutputfile中的第九个字段附加到^4\.4。如果第二个字段以^ 4开头,后跟句点.后跟4,则正则表达式匹配。

注意:

  • >>是附加运算符,如果您只希望myoutputfile包含awk命令的输出,则使用重定向运算符>这将首先清空文件。

  • 默认情况下,
  • awk会打印到stdout,使用反引号并不需要echo

  • awk脚本应仅包含在单引号中,并且此处不需要引用文件。

修改

仅使用exit返回第一个匹配项以退出脚本:

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

答案 1 :(得分:2)

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

符号^表示列的开头。

答案 2 :(得分: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]*$/