0

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

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

不幸的是,这在语法上是不正确的,但我不知道如何解决它。任何帮助将非常感激。谢谢。

4

3 回答 3

5

正确的语法是:

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

如果第二个字段与正则表达式匹配,myfile这将附加第九个字段。如果第二个字段以a开头,然后是句点,然后是 ,则正则表达式匹配。myoutputfile^4\.4^4.4

笔记:

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

  • awk默认情况下打印到标准输出,使用反引号并且echo不是必需的。

  • awk脚本应该只用单引号括起来,文件不需要在这里引用。

编辑:

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

awk '$2~/^4\.4/{print $9;exit}' myfile
于 2013-05-06T16:45:42.773 回答
2
awk '$2 ~ /^4[.]4/ {print $9}' myfile >> myoutputfile

符号^表示列的开始。

于 2013-05-06T16:48:24.863 回答
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]*$/
于 2013-05-06T16:51:00.373 回答