将文件中的重复数据与第二个文件中的第二列匹配

时间:2015-06-13 04:53:00

标签: arrays bash awk sed

您好,我有一个包含重复数据的文件:

ENGLAND
ENGLAND
ENGLAND
JAPAN
JAPAN
JAPAN
JAPAN
AMERICA
AMERICA
AMERICA

第二个文件包含两列唯一数据(由" ="分隔),第一列被视为关键字:

ENGLAND=LONDON
JAPAN=TOKYO
AMERICA=WASHINGTON DC
AUSTRALIA=SYDNEY
IRELAND=DUBLIN

我试图找出如何使用第一列作为匹配键输出第二个文件的第二列。输出应为:

LONDON
LONDON
LONDON
TOKYO
TOKYO
TOKYO
TOKYO
WASHINGTON DC
WASHINGTON DC
WASHINGTON DC

我尝试在bash中使用第一个文件作为数组,并使用cat作为搜索功能将第二个文件中的cat用管道传输到grep中。输出并不等同于数组的多个实例。我认为awk使用数组有一种方法,但是我在过去几天里无法弄明白。

2 个答案:

答案 0 :(得分:1)

您可以使用此awk命令:

-F=                          # use = as input field separator
NR == FNR {                  # While processing the 2nd file
  a[$1] = $2                 # store the second field by the first in an array a
  next                       # move to next record
}
{                            # while processing the 1st file
  print a[$1]                # print array value (Capital) from array for key=$1
}

工作原理:

{{1}}

答案 1 :(得分:1)

使用sed:

sed -f <(sed 's|\(.*\)=\(.*\)|s/\1/\2/|' file2) file1

输出:

LONDON
LONDON
LONDON
TOKYO
TOKYO
TOKYO
TOKYO
WASHINGTON DC
WASHINGTON DC
WASHINGTON DC