【问题标题】:AWK, Unix command: How to match two files using corresponding first column in unix commandAWK,Unix命令:如何使用unix命令中对应的第一列匹配两个文件
【发布时间】:2016-07-28 18:05:01
【问题描述】:

我有两个文件,第一个是单列(重复 ID),第二个文件是三列文件,第一列是 ID,与第一个文件相同但唯一编号,我想打印对应的第二个文件的剩余两列到第一个文件 ID。

示例: 第一个文件:

IDs
1
3
6
7
11
13
13
14
18
20

第二个文件:

IDs Freq    Status
1   1   JD611
2   1   QD51
3   2   
5       
6       
7   2   
11  2   
13  2   
14  2   

所需的输出

1 1   JD611
3 2 
6
7 2
11 2
13 2
13 2
14 2
18 
20

【问题讨论】:

  • 你可以使用简单的循环。从第一个文件中读取每一行并从第二个文件中读取该行。
  • 您想要的输出显示重复。糟糕,现在你不能使用grep -f <(sed '1d;s/.*/^& /' File1.txt ) File2.txt

标签: r linux unix awk


【解决方案1】:

你可以使用这个awk

awk 'NR==FNR{a[$1]=$2 FS $3; next} {print $1, a[$1]}' f2 f1

要跳过标题行,

awk 'FNR==1{next} NR==FNR{a[$1]=$2 FS $3; next} {print $1, a[$1]}' f2 f1

如果第二个文件有多个列,

awk 'NR==FNR{c=$1; $1=""; a[c]=$0; next} {print $1, a[$1]}' f2 f1

【讨论】:

  • 谢谢,它的作品,非常感谢,sat,如果第二个文件包含多列,那么呢??
  • @mona,更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多