如何比较两个不同文件中的两对列以及水平合并的打印匹配项(BASH或AWK的首选项)?

迪奥戈

我正在尝试通过匹配两对不同的列来比较两个制表符分隔的文件。匹配之后,我想从水平合并的两个文件中打印匹配行(即,并排,类似于BASH粘贴)。文件有12列。

环顾四周,我没有发现任何类似的问题,这使我担心我可能对此问题的思考过多。

简而言之,目标是“将第1列(文件1)与第2列(文件2)匹配”和“第2列(文件1)与第1列(文件2)匹配”,然后分别打印匹配线并排。

一个例子:

File1.tsv

1   A   ExtraInfo
2   B   ExtraInfo
3   C   ExtraInfo
4   D   ExtraInfo
5   E   ExtraInfo

File2.tsv

D   4   ExtraInfo
B   7   ExtraInfo
E   9   ExtraInfo
C   3   ExtraInfo
A   1   ExtraInfo

所需的输出:

1   A   ExtraInfo   A   1   ExtraInfo
3   C   ExtraInfo   C   3   ExtraInfo
4   D   ExtraInfo   D   4   ExtraInfo

尽管找不到相同问题的人,但我确实找到了一些类似的问题,使我认为awk可能是我最好的选择。不幸的是,我仍然对它一无所知,因此我的尝试仅限于尝试使代码适应类似问题。

我尝试了以下操作,但无济于事:

awk 'NR==FNR{a[$2]=$1 && a[$1]=$2;next} {print $0,a[$0]}' file1 file2

但是,如果有人只能用另一种默认语言为Ubuntu提供帮助,我仍然会很感激。

标记融合

注意:OP提供了更多详细信息(例如,文件有12列)之后,我在答案中添加了@karafka的建议编辑。


假设:

  • 文件中的每个第一/第二列对都是唯一的(即,每个文件最多匹配一行)
  • 第三列不包含任何标签(即,每个由标签分隔的文件共有3列)
  • 输出按第一列和第二列排序(即,不尝试根据源文件的内容维护任何排序)

一种awk/sort解决方案:

awk -F"\t" '                                          # input delimiter is a tab
BEGIN         { OFS=FS }                              # output delimiter is also a tab
NR==FNR       { a[$1,$2]=$0 ; next }                  # store first file line in array using fields 1 & 2 as index 
($2,$1) in a  { print a[$2,$1],$0 }                   # if array entry exists with first 2 fields as index (in reverse order) then print array element==matching-line-from-file1 and $0==current-line-from-file2 to stdout
' file1.tsv file2.tsv | sort                          # sort output from awk [optional]

注意:删除注释以使代码混乱。

对示例数据文件运行以上操作会生成:

1       A       ExtraInfo       A       1       ExtraInfo
3       C       ExtraInfo       C       3       ExtraInfo
4       D       ExtraInfo       D       4       ExtraInfo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何比较两个不同文件的两列

来自分类Dev

如何使用awk合并来自两个不同文件的一列

来自分类Dev

AWK-比较两个不同文件中两个变量的值

来自分类Dev

AWK-比较两个不同文件中两个变量的值

来自分类Dev

匹配两个不同文件中的最接近值并打印特定列

来自分类Dev

如何比较两个文件的两列并使用awk打印不匹配的模式

来自分类Dev

如何比较两个文件的两列并打印与awk匹配的数目

来自分类Dev

如何比较两个文件的两列并使用awk打印不匹配的模式

来自分类Dev

如何比较两个文件的两列并打印与awk匹配的数目

来自分类Dev

我们如何比较两个不同文件中的两个列表?

来自分类Dev

查找不同文件的两列之间的匹配项并将其打印到不同的列中

来自分类Dev

使用python比较两个csv文件中的第一列并打印匹配项

来自分类Dev

比较shell脚本中两个不同文件中的两列

来自分类Dev

两个文件中的AWK列匹配,打印不同的列

来自分类Dev

用awk比较两个不同文件的第一列

来自分类Dev

用awk比较两个不同文件的第一列

来自分类Dev

如何比较来自两个不同文件的两列?

来自分类Dev

Perl:匹配来自两个不同文件的列

来自分类Dev

Bash方法基于索引列表比较来自两个不同文件的特定列

来自分类Dev

如何比较两个不同的列数据,而不考虑不同文本文件中的顺序?

来自分类Dev

使用 awk 比较来自两个不同文件的两个字段

来自分类Dev

比较两个文件并在第一个文件中打印匹配项,并添加额外的列

来自分类Dev

如何比较两个不同文件夹中的文件并执行条件复制

来自分类Dev

比较不同列的两个文件并打印不同列

来自分类Dev

在python中合并来自两个不同文本文件的列

来自分类Dev

在python中合并来自两个不同文本文件的列

来自分类Dev

如何递归比较两个不同文件夹中的用户和组?

来自分类Dev

比较两个不同文件中的两个元组

来自分类Dev

如何合并两个不同文本文件中的值?

Related 相关文章

  1. 1

    如何比较两个不同文件的两列

  2. 2

    如何使用awk合并来自两个不同文件的一列

  3. 3

    AWK-比较两个不同文件中两个变量的值

  4. 4

    AWK-比较两个不同文件中两个变量的值

  5. 5

    匹配两个不同文件中的最接近值并打印特定列

  6. 6

    如何比较两个文件的两列并使用awk打印不匹配的模式

  7. 7

    如何比较两个文件的两列并打印与awk匹配的数目

  8. 8

    如何比较两个文件的两列并使用awk打印不匹配的模式

  9. 9

    如何比较两个文件的两列并打印与awk匹配的数目

  10. 10

    我们如何比较两个不同文件中的两个列表?

  11. 11

    查找不同文件的两列之间的匹配项并将其打印到不同的列中

  12. 12

    使用python比较两个csv文件中的第一列并打印匹配项

  13. 13

    比较shell脚本中两个不同文件中的两列

  14. 14

    两个文件中的AWK列匹配,打印不同的列

  15. 15

    用awk比较两个不同文件的第一列

  16. 16

    用awk比较两个不同文件的第一列

  17. 17

    如何比较来自两个不同文件的两列?

  18. 18

    Perl:匹配来自两个不同文件的列

  19. 19

    Bash方法基于索引列表比较来自两个不同文件的特定列

  20. 20

    如何比较两个不同的列数据,而不考虑不同文本文件中的顺序?

  21. 21

    使用 awk 比较来自两个不同文件的两个字段

  22. 22

    比较两个文件并在第一个文件中打印匹配项,并添加额外的列

  23. 23

    如何比较两个不同文件夹中的文件并执行条件复制

  24. 24

    比较不同列的两个文件并打印不同列

  25. 25

    在python中合并来自两个不同文本文件的列

  26. 26

    在python中合并来自两个不同文本文件的列

  27. 27

    如何递归比较两个不同文件夹中的用户和组?

  28. 28

    比较两个不同文件中的两个元组

  29. 29

    如何合并两个不同文本文件中的值?

热门标签

归档