string - 我如何根据字符串打印整列。 (随机列数)

标签 string awk grep cut

第一天我可能会收到大量 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/

相关文章:

r - 计算子字符串中特定字符的数量

git - 如何在文件末尾没有换行符的情况下列出 Git 索引中的所有文件

regex - 如何使用正则表达式匹配特定的数字范围

linux - 如何grep值小于或等于值的行

c - 从 fgets() 输入中删除尾随换行符

c++ - 字符串文字中的比较导致未指定的行为 - C++

c++ - 如何使用正则表达式查找 C 文件中的所有数组声明?

linux - 尝试查找其中包含特殊字符的文件

c - 打印出使用字符串在文本文件中搜索单词时出错

string - 在 Racket 中查找子字符串的索引