【问题标题】:Merging two files with unequal lengths based on two keys in linux [duplicate]基于linux中的两个键合并两个长度不等的文件[重复]
【发布时间】:2020-12-29 09:59:05
【问题描述】:

我有两个不同长度的txt文件。

File 1:
Albania 20200305    0
Albania 20200306    0
Albania 20200307    0
Albania 20200308    0
Albania 20200309    3
Albania 20200310    7
Albania 20200311    4
Albania 20200312    2
File 2: 
Europe  Albania 20200309    2
Europe  Albania 20200310    6
Europe  Albania 20200311    10
Europe  Albania 20200312    11
Europe  Albania 20200313    23
Europe  Albania 20200314    33

我想创建一个 File3,如果 File1 的第 1 列和第 2 列与 File2 的第 2 列和第 3 列相同,它将在 File2 的末尾添加 File1 的 3. 列。它应该是这样的:

File3:
Europe  Albania 20200309    2   3
Europe  Albania 20200310    6   7
Europe  Albania 20200311    10  4
Europe  Albania 20200312    11  2

我试过了

awk 'NR==FNR{A[$1,$2]=$3;next} (($2,$3) in A) {print $0, A[$1,$2]}' file1.txt file2.txt > file3.txt

但它只是打印文件2,并没有添加文件1的第三列。

你能帮我解决这个问题吗?

提前致谢!

【问题讨论】:

    标签: shell awk merge multiple-columns


    【解决方案1】:

    您的方法是正确的,但是在打印时您需要像 A[$2,$3] 这样使用,您正在使用数组中不存在的 A[$1,$2](因为 file1 的第 1、2 列应该与 file2 的第 2 和第 3 列进行比较)因此,它只打印 file3 中 file2 的当前行值。

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

    另请参阅链接(感谢 James 在此处提供不错的链接)Why we shouldn't use variables in capital letters

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 2013-03-28
      • 2021-12-04
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 2016-11-24
      相关资源
      最近更新 更多