【问题标题】:Compare 2 input files and reorder [closed]比较2个输入文件并重新排序[关闭]
【发布时间】:2013-08-10 21:32:45
【问题描述】:

我是 awk 的新手。

我有 2 个输入文件,分别称为 file1 和 file2。

file1 的每条记录都有文字形式:X 其中 X 是某个字符串。

file2 的每条记录都有文字形式:abY 其中 Y 也是一些字符串,ab 是一个变量的两个字母前缀。

文件1的记录数与文件2相同。

Y 的集合只是 X 的集合的重新排序。

我想要一个单行来比较 file1 的每一行(形式 X)和 file2 的每一行(形式 abY),这样当 X 与 abY 中的 Y 匹配时,将 abY 打印到输出名为 file3 的文件。

这几天我一直在为此苦苦挣扎。我曾尝试根据类似的堆栈问题修改许多单行代码,这些问题涉及两个输入文件的 awk 字符串比较,但没有得到想要的结果。

非常感谢任何帮助。

【问题讨论】:

    标签: string file-io awk


    【解决方案1】:

    这是完成这项工作的一条线。我确信有更优雅的方法可以做到这一点......

    awk 'NR==FNR{a[$0];next} {for (i in a) if (substr(i,3)==$0) {print i}}' file2 file1 > file3.

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      awk 'FNR<NR {if(substr($0,3) in buf) print $0; next;} {buf[$0]=0}' file1 file2
      

      【讨论】:

      • 感谢您的帮助,@SomeGuy。您的代码输出 file2 的内容(即,它按照在 file2 中找到的顺序打印字符串格式 abY) - 这是我在挣扎之前所得到的。我想做的是输出字符串根据 Y(file1 的 X 的匹配项)在 file1 中出现的顺序格式化 abY。
      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2015-01-29
      相关资源
      最近更新 更多