第一天我可能会收到大量 CSV 输出,例如:
this,is,a,test<br/>
bob,is,your,uncle<br/>
sound,one,"Zen proverb",clapping<br/>
第二天我可能会收到如下输出:
test,this,is,a<br/>
clapping,one,sound,"Zen proverb"<br/>
uncle,bob,is,your<br/>
Neo,the,Matrix,"Has you"<br/>
我感兴趣的列和行总是随机的,我永远不会知道输出将作为哪个字段出现 - 但我只对具有特定字符串的垂直列感兴趣。例如“叔叔”。
test<br/>
clapping<br/>
uncle<br/>
Neo<br/>
我是 awk 和 PERL 的新手 - 但我想 awk 能够根据匹配的字符串(上下列)打印第一个匹配列。有谁知道我应该如何解析此类数据?
最佳答案
听起来您想要以下内容:给定一个字符串和一个逗号分隔的文件,找到该字符串的第一个匹配项并为文件中的每个记录输出该字段。对文件进行 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 两次,第一次只获取列输出,第二个进行打印。
关于string - 我如何根据字符串打印整列。 (随机列数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11087214/