【问题标题】:join 2 files based on fields in a columns根据列中的字段连接 2 个文件
【发布时间】:2014-06-10 08:12:21
【问题描述】:

我正在尝试连接两个具有不同行和列长度的文件,并且有一列以未排序的方式包含相似信息。

文件如下所示: 文件 1

ab 23 33 4 55 6 7 8 9
ab 2 3 44 5 6 7 8
ab 3 4 22 7 8 9 9 00 9
ad 2 3 4 5 4 3
ac 456 47 8 9 0 0 hh kk
af 2 dd 5 6 zz 7 8

文件2

data ab 33 4 5
data ad 3 4 5 
data ac 3 4 5 6 7 8 

预期输出:

文件 3

ab 23 33 4 55 6 7 8 9 data ab 33 4 5
ab 2 3 44 5 6 7 8 data ab 33 4 5
ab 3 4 22 7 8 9 9 00 9 data ab 33 4 5
ad 2 3 4 5 4 3 data ad 3 4 5 
ac 456 47 8 9 0 0 hh kk data ac 3 4 5 6 7 8

查看其他帖子How to join multiple txt files into based on column?Join on first column of two files,我发现最好的方法是使用

awk

我试过了:

awk -F "\t" 'NR==FNR{a[$2]=$0; next}$1 in a {print $0, a[$2]}' file2 file1 > file3

问题是它只打印 file1 而不是 file2。

我真的不明白我的错误在哪里。有什么建议吗?

非常感谢!

【问题讨论】:

  • 发布所需的输出。

标签: linux join awk


【解决方案1】:

您没有发布预期的输出,但是您的 awk 行有问题,我想应该是:

awk -F "\t" 'NR==FNR{a[$2]=$0; next}$1 in a {print $0, a[$1]}' file2 file1

我上次换了{...}a[$2] -> a[$1]

【讨论】:

  • 这太令人沮丧了....是的,你是对的!但我不明白为什么。 a[$2] 的意思是“打印整个第一个文件”吗?
  • @efrem in NR==FNR{..}, $1,2,3... 是您的第一个输入文件 file2 中的列。在$1 in a{...} 这里,$1,$2,$3... 是您的第二个输入文件中的列,即file1,我认为您对$x 和输入文件感到困惑
  • 非常感谢。它完成了这项工作,但是,正如我在编辑后的帖子中指出的那样,现在发生了一些奇怪的事情。我不明白为什么。
猜你喜欢
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2017-12-18
相关资源
最近更新 更多