如果字段在AWK中匹配字符串,则打印行

时间:2017-07-10 09:28:28

标签: csv awk

我有一个csv文件,如果certail字段以特定字符串结尾,我正在尝试使用awk打印行。例如,我有以下CSV文件:

col1,col2,col3
1,abcd,.abcd_efg
2,efgh,.abcd
3,ijkl,.abcd_mno
4,mnop,.abcd
5,qrst,.abcd_uvw

这是我追求的结果:

2,efgh,.abcd
4,mnop,.abcd

但我得到了不同的结果。这是我正在使用的awk命令:

 cat file.csv | awk -F"," '{if ($3 ~ ".abcd" ) print $0}'

这是我得到的结果:

1,abcd,.abcd_efg
2,efgh,.abcd
3,ijkl,.abcd_mno
4,mnop,.abcd
5,qrst,.abcd_uvw

我的活动尝试了以下内容,但未返回匹配项,因此无法正常工作:

cat file.csv | awk -F"," '{if ($3 ~ ".abcd$" ) print $0}'

有任何疑问可能是什么问题?我使用错误的表达式得到这个结果吗?

编辑:这是我在尝试肯特解决方案时尝试的另一个命令,但它没有工作:

cat file.csv | awk -F"," '$3 ~ "[.]abcd"'

2 个答案:

答案 0 :(得分:2)

  • 首先,cat中的cat file|awk ...无用,只有awk ... file

  • 您的输入文字没有单个逗号,您如何设置FS=","

  • 如果您想进行精确的字符串比较,请使用$3 == "whatever"代替$3 ~ /regex/

因此您的代码可以更改为:

awk  '$3 == ".abcd"' file
  • 如果你真的喜欢正则表达式,并希望以正则表达式匹配方式:

    awk  '$3 ~ "[.]abcd$"' file
    

awk '$3 ~ /^[.]abcd$/' file

取决于您的要求。

答案 1 :(得分:0)

您可以按照以下方式修改awk命令,

$ cat file.csv | awk '$3 ~ /\.abcd$/ {print $0}'
2    efgh .abcd
4    mnop .abcd

简要说明,

  • $3 ~ /.abcd$/:如果$3与正则表达式.abcd$匹配,请打印$0

根据您修改过的问题,您可以将awk命令更改为:

cat file.csv | awk -F, '$3 ~ /\.abcd$/ {print $0}'