我有两个具有多行的文件。 第一个文件有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
答案 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
。