是否可以打印包含特定值的字段?
考虑以下文件:
foo,boo,123,1234312,ABC
foo,boo,ABC,bla,bla
有一个字段包含ABC
但不是所有记录都固定的,因此该命令需要$5
在第一条记录和$3
第二条记录中打印。
答案1
是的,就像在你的上一个问题,但匹配每个字段:
$ awk -F, '{for(i=1;i<=NF;i++){if($i~/ABC/){print $i}}}' file
ABC
ABC
请注意,上面还将打印一个文件包含 ABC
,比如fooABC
或者fooABCbar
什么。仅打印以下字段是 ABC
, 使用:
awk -F, '{for(i=1;i<=NF;i++){if($i=="ABC"){print $i}}}' file
同样的事情,在 Perl 中:
perl -F, -lane 'print grep{/ABC/}@F' file ## field matches
perl -F, -lane 'print grep{$_=="ABC"}@F' file ## field is
答案2
您可以grep
与 PCRE(Perl 兼容正则表达式)一起使用:
grep -Po '(?<=^|,)ABC(?=,|$)' file.txt