假设我有一个标签分隔的csv文件,如下所示:
a b c
d e f
g h i
使用命令行实用程序,是否可以返回与所需grep模式匹配的整个列,或者在上面的示例中,我想返回b的grep的第二列?
最佳答案
awk -F'\t' -v pat="b" 'NR==FNR{for(i=1;i<=NF;i++)if($i~pat)c[i];next}
{s="";for(i=1;i<=NF;i++)
if(i in c)s=s sprintf("%s\t", $i);
sub(/\t$/,"",s);print s}' file file
这条线起作用。
它将打印与您的
pat
匹配的任何列,并保持column
格式。pat
是regex,您可以将shell变量传递给awk行输出遵循原始列顺序
看一看这个例子:(我在您的第3列中添加了一个
b
来显示多个匹配的案例):kent$ cat f
a b c
d e b
g h i
kent$ awk -F'\t' -v pat="b" 'NR==FNR{for(i=1;i<=NF;i++)if($i~pat)c[i];next}{s="";for(i=1;i<=NF;i++)if(i in c)s=s sprintf("%s\t", $i);sub(/\t$/,"",s);print s}' f f
b c
e b
h i