打印包含特定值的字段

打印包含特定值的字段

是否可以打印包含特定值的字段?

考虑以下文件:

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

相关内容