我有一个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"'
答案 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}'