在第一天,我可能会收到大量的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能够根据匹配的字符串打印第一个匹配列(向上和向下列)。有谁知道我应该如何解析这类数据?
答案 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,第一个只是输出列而第二个执行打印。