2

在第一天,我可能会收到大量的 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 将能够根据匹配的字符串打印第一个匹配列(Up-and-Down the column)。有谁知道我应该如何解析这种数据?

4

1 回答 1

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 两次,第一次只是让列输出,第二次进行打印。

于 2012-06-18T16:50:13.873 回答