我有两个用制表符分隔的文件:
文件1.txt:
1 KD
2 LBJ
3 YAO
4 LBJ
5 YAO
6 MJ
7 MJ
8 YAO
9 KD
文件2.txt:
KD 35
LBJ 6
YAO 11
MJ 23
预期输出:
1 KD 35
2 LBJ 6
3 YAO 11
4 LBJ 6
5 YAO 11
6 MJ 23
7 MJ 23
8 YAO 11
9 KD 35
对 awk 的任何帮助表示赞赏。
答案1
你可以用 awk 来做到这一点:
awk -F'\t' -v OFS='\t' 'NR==FNR{a[$1]=$2;next}{print $0, a[$2]}' file2 file1
1 KD 35
2 LBJ 6
3 YAO 11
4 LBJ 6
5 YAO 11
6 MJ 23
7 MJ 23
8 YAO 11
9 KD 35
另一种选择是使用join
命令:
join -1 2 -2 1 -o 1.1 1.2 2.2 -t $'\t' <(sort -k2,2 file1) <(sort file2) | sort -n
解释:
-1 2 -2 1
告诉join
命令将第一个文件的第二个字段与第二个文件的第一个字段连接起来-o 1.1 1.2 2.2
这指定输出中字段的顺序。点之前的数字是文件号,点之后的数字是文件的字段号-t $'\t'
指定分隔符为制表符<(sort -k2,2 file1) <(sort file2)
按要连接的字段对文件进行排序。该join
命令要求对文件进行排序。| sort -n
对输出文件进行排序