给定一个文件1:

13 a b c d
5 f a c d
7 d c g a
14 a v s d

和一个文件2:
7 x
5 c
14 a
13 i

考虑到file2中第一列的相同顺序,我想对file1进行排序,因此输出应为:
7 d c g a
5 f a c d
14 a v s d
13 a b c d

是否可以在bash中执行此操作,还是应该使用python等“高级”语言?

最佳答案

使用awkfile2中的行号放在file1前面,作为额外的一列。按该列对结果进行排序。然后删除该前缀列

awk 'FNR == NR { lineno[$1] = NR; next}
     {print lineno[$1], $0;}' file2 file1 | sort -k 1,1n | cut -d' ' -f2-

10-04 20:10