在第一列的基础上打印两个文件

时间:2019-12-19 10:40:55

标签: awk sed

我有两个具有多行的文件。 第一个文件有2个列,第二个文件有2000个以上列。 示例数据集是:

示例文件_1

car Maruti
car TATA
car Hyundai
car Jaguar
Jeep Mahindra

示例文件_2

car  A B C D E F G
Jeep X Y Z W Q W K

我已经尝试过了

awk '{a[$1]=a[$1]" "$0} ++n[$1]==2{print a[$1]}' File_2 File_1

此命令的输出仅一次打印数据,而不能按理想顺序打印数据。我得到以下结果:

car  A B C D E F G car Maruti
Jeep X Y Z W Q W K Jeep Mahindra

基于第一个文件的预期输出为:

car  Maruti    car  A B C D E F G
car  TATA      car  A B C D E F G
car  Hyundai   car  A B C D E F G
car  Jauar     car  A B C D E F G
Jeep Mahindra  Jeep X Y Z W Q W K

2 个答案:

答案 0 :(得分:1)

请您尝试以下。

awk 'FNR==NR{a[$1]=$0;next} ($1 in a){print $0,a[$1]}'  file2 file1 | column -t

输出如下。

car   Maruti    car   A  B  C  D  E  F  G
car   TATA      car   A  B  C  D  E  F  G
car   Hyundai   car   A  B  C  D  E  F  G
car   Jaguar    car   A  B  C  D  E  F  G
Jeep  Mahindra  Jeep  X  Y  Z  W  Q  W  K

答案 1 :(得分:1)

在这里使用join命令特别适合像您这样的任务。但是,join需要排序的文件,因此我们首先进行排序。

使用bash可以就地进行排序

join <(sort 1stFile) <(sort 2ndFile)

使用普通的posix shell(sh),您必须使用临时文件

 sort 1stFile > 1stFileSorted
 sort 2ndFile > 2ndFileSorted
 join 1stFileSorted 2ndFileSorted
 rm 1stFileSorted 2ndFileSorted

要对齐输出中的列,可以使用join … | column -t