grep输出从long到wide

2021-02-14 22:10

我有一个模式文件,我想返回找到模式的所有行号,但格式很宽,不长/排列。示例:文件a.txt德国UK文件b.txtusausaitalygermanyukukcanadacanadagermanyaustraliau

解答动态

  • Using GNU数据mash:
    $grep-n-x-F-F美元文件A.txt文件B.txt

    • datamash-s-t:-g2折叠1德国:4,9英国:5,6美国:1,2,11 首先使用grep从文件B.txt这完全符合文件A.txt, 输出匹配的行号以及行本身。
      除了问题中使用的选项外,我还使用了-x和-F。我这样做是为了避免从文件A.txt作为正则表达式(-F),并匹配完整的行,而不是子字符串(-x)。
      Datamash实用程序然后将其解析为:-分隔字段(-t:)的行,在第二个字段(-g2;国家)上排序(-s),并将第一个字段(折叠1;行号)折叠到一个列表中对于每个country.
      ,如果愿意,您可以使用tr':,''作为额外的管道步骤,用空格替换冒号和逗号,或者用tr':,''\t'替换制表符。
      $grep-n-x-f文件A.txt-F级文件B.txt

      • datamash-s-t:-g 2 collapse 1

        • tr':,''\t'德国4 9英国5 6美国1 2 11

          • $grep-NXF公司文件A.txt文件B.txt\

            • awk-F:“$0=(长度($2)FS$0)”\

              • 排序-t:-k1,1nr-k3,3-k2,2n\

                • 剪切-d:-f2-\

                  • sed-Ee”:a$!N、 y/://s/(\s+)\N(.*\1)$/\2/ta s/([^\N]*)([^\N]*)((\N.*))$/\2\1\3/P;D' O/P:
                    4德国9美国12 11英国5 6

                    • 您可以将grep命令输出与Miller耦合(https://github.com/johnkerl/miller)并运行
                      grep-nf文件A.txt文件B.txt

                      • \mlr--c2n--ifsquot;--implicit csv header--headerless csv output reorder-f2 then\nest--内爆--values--跨记录--nested fs如果您选择了德国、美国、英国

                        • End

                        免责声明:

                        本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。