【问题标题】:How to match two files and filter a third for matched values by column?如何匹配两个文件并按列过滤第三个匹配值?
【发布时间】:2014-06-28 02:02:07
【问题描述】:

感谢您对以下方面的意见:

我想按其中的 ID(第一列)匹配两个文件,并按列过滤第三个文件,仅匹配那些匹配的 ID。

我有三个文件(见下文)。我想将file1$1file2 中的ID 匹配。在两个文件之间相等的那些 ID 中,我想按列过滤 file3File3 列的排序类似于row1file1。唯一的区别是 ID 名称不表示为 file3 的列名称。我只知道它具有相同的顺序。

file1:

ID  X  Y
ID1 X1 Y1
ID2 X2 Y2 
ID3 X3 Y3

file2:

ID1
ID3

file3(列的顺序与file1 的行的顺序相似 - 仅没有实际 ID)

Z 1 2 3
W 1 2 3
V 1 2 3

输出:

Z 1 3
W 1 3
V 1 3

我该怎么办?

【问题讨论】:

  • 看起来您只是从文件 3 中删除了第三列。目前尚不清楚 ID 所起的作用。您最大的障碍可能是无法用通俗易懂的语言准确地说明问题;通常,当您能够做到这一点时,代码就会弹出 --- 如果您知道如何编码,那就是。
  • 你可以使用sed命令功能...
  • @ManoloSalsas Sed 用于对组织成行和列的数据进行转换是完全愚蠢的;在同一环境中可用的理想工具是 Awk。
  • 您最好将文件 2 和 3 合并为 1 个文件,即paste file2 file3 > newFile2。然后阅读join 命令。祝你好运。

标签: regex linux unix string-matching


【解决方案1】:

不需要 sed、awk、粘贴或加入。

cut -d' ' -f`grep -nffile2 file1|cut -d: -f1|tr '\n' ,`1 file3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2021-10-01
    • 2021-03-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多