如何将文本文件与其行中的常见字符串对合并

时间:2016-04-07 02:53:26

标签: bash shell parsing unix

我有两个文本文件,其格式如下:

Value - Value - Number

我需要将这些文件合并为一个新文件,其中只包含具有公共值的行 - 值对后跟两个数字值。

例如,如果我有这些文件:

FILE1.TXT

Jack - Mark - 12
Alex - Ryan - 15
Jack - Ryan - 22

FILE2.TXT

Paul - Bill - 11
Jack - Mark - 18
Jack - Ryan - 20

合并后的文件将包含:

Jack - Mark - 12 - 18
Jack - Ryan - 22 - 20

我该怎么做?

1 个答案:

答案 0 :(得分:2)

awk救援!

awk -F' - ' 'BEGIN{OFS=FS} 
           NR==FNR{a[$1,$2]=$3;next} 
      ($1,$2) in a{print $1,$2,a[$1,$2],$3}' file1 file2

Jack - Mark - 12 - 18
Jack - Ryan - 22 - 20

或者,使用decorate / join / undecorate

$ join <(sort file1 | sed 's/ - /-/') <(sort file2 | sed 's/ - /-/') |
  sed 's/-/ - /'

Jack - Mark - 12 - 18
Jack - Ryan - 22 - 20