如何根据字符串打印整列。 (随机列号)

时间:2012-06-18 16:35:52

标签: string awk grep cut

在第一天,我可能会收到大量的CSV输出,例如:
this,is,a,test
bob,is,your,uncle
sound,one,"Zen proverb",clapping


在第二天,我可能会收到如下输出:
test,this,is,a
clapping,one,sound,"Zen proverb"
uncle,bob,is,your
Neo,the,Matrix,"Has you"


我感兴趣的列和行将始终是随机的,我永远不会知道输出将作为哪个字段 - 但我只对具有特定字符串的垂直列感兴趣。例如'叔叔'。
test
clapping
uncle
Neo

我是awk和PERL的新手 - 但我想awk能够根据匹配的字符串打印第一个匹配列(向上和向下列)。有谁知道我应该如何解析这类数据?

1 个答案:

答案 0 :(得分:2)

听起来您需要以下内容:给定字符串和逗号分隔文件,找到字符串的第一个匹配项并为文件中的每个记录输出该字段。对文件进行2次传递,第一次传递查找匹配项:

 s=uncle
 awk 'NR==FNR && /'$s'/ { for( i=1; i<=NF; i++ ) if( $i ~ /'$s'/ ) { a=i; nextfile; } }
    NR!=FNR{ print $a}' FS=, input input

请注意,如果字符串不在文件中,则第二遍将打印整个记录。 nextfile也不是标准的awk,但在gawk中确实存在。而不是nextfile,您可以执行:NR==FNR && /'$s'/ && !a,或者只调用两次awk,第一个只是输出列而第二个执行打印。