合并几个文本文件

时间:2016-07-28 02:47:46

标签: awk sed grep cut

好的,所以我需要用几个文本文件来完成这个。 我需要合并这两个文件。

文件1和文件2需要成为文件3。

文件1:

ABC:123
TUV:678
QRS:456

文件2:

123:XXX
678:EEE
456:DDD

文件3:

ABC:123:XXX
TUV:678:EEE
QRS:456:DDD

如上所示,第二项在FILE 1和FILE 2中都很常见。我只需要合并FILE 1和FILE 2中的所有项目,这些项目都有一个像FILE 3中一样的公共项目.I&#39 ; d更喜欢使用grep,sed,cut等。

2 个答案:

答案 0 :(得分:3)

$ cat file1
ABC:123
TUV:678
QRS:456
$ cat file2
123:XXX
678:EEE
456:DDD

awk 'BEGIN{FS=":"}NR==FNR{f2[$2]=$0;next}$1 in f2{printf "%s:%s\n",f2[$1],$2}' file1 file2 >file3

$ cat file3
ABC:123:XXX
TUV:678:EEE
QRS:456:DDD

答案 1 :(得分:2)

使用GNU coreutils sortjoin

join -t: -1 2 -2 1 <(sort -t: -k2n file1) <(sort -t: -k1,1n file2)

输出:

123:ABC:XXX
456:QRS:DDD
678:TUV:EEE

解释

join需要知道要加入哪些字段,并且必须对其输入进行排序。 join的选项执行以下操作:

  • -t:使用冒号作为字段分隔符
  • -1 2使用第一个文件中的第二个字段作为键
  • -2 1使用第二个文件中的第一个字段作为键

sort次调用按键列以数字方式对每个文件进行排序。