【问题标题】:How would I print a whole column based upon string. (Random Column Number)我将如何根据字符串打印一整列。 (随机列号)
【发布时间】:2012-06-20 16:19:59
【问题描述】:

在第一天,我可能会收到大量 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 列)。有谁知道我应该如何解析这种数据?

【问题讨论】:

    标签: string awk grep cut


    【解决方案1】:

    听起来您想要以下内容:给定一个字符串和一个逗号分隔的文件,找到该字符串的第一个匹配项并为文件中的每条记录输出该字段。对文件进行 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 &amp;&amp; /'$s'/ &amp;&amp; !a,或者只调用两次 awk,第一次只是将列输出,第二次进行打印。

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 2023-03-17
      • 2014-04-08
      • 2016-03-21
      • 2021-10-12
      • 2023-03-03
      • 1970-01-01
      • 2022-09-25
      • 1970-01-01
      相关资源
      最近更新 更多