2012-06-18 69 views
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"


列和行I” m感兴趣的将始终是随机的,我永远不会知道输出会来到哪个字段 - 但我只对具有特定字符串的垂直列感兴趣。例如'叔叔'。
test
clapping
uncle
Neo
如何根据字符串打印整列。 (随机列号)

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

回答

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,第一个是让列输出,第二个是打印。

+0

工作就像一个魅力! –