如何在Bash中按首列合并多个文本文件?
按首列合并多个纯文本文件的方法
下面提供两种实用的命令行方法,适用于合并2个以上按首列匹配的纯文本文件:
方法一:使用awk(推荐,适合任意数量文件)
awk可以一次性处理所有目标文件,通过数组存储每个首列对应的内容,最后统一输出:
awk '{key=$1; $1=""; arr[key]=arr[key] $0} END{for(k in arr) print k arr[k]}' file1.txt file2.txt file3.txt > ideal.txt
逻辑说明:
- 遍历每个文件的每一行,提取首列作为匹配键
key - 移除首列后,将剩余内容追加到对应
key的数组元素中 - 所有文件处理完成后,遍历数组,输出每个键及其对应的所有内容
方法二:使用join(适合少量文件)
join默认按首列合并文件,但仅支持两两合并,处理多个文件时需要通过管道嵌套执行:
join file1.txt file2.txt | join - file3.txt > ideal.txt
逻辑说明:
- 第一步
join file1.txt file2.txt合并前两个文件,结果输出到管道 - 第二步
join - file3.txt中,-表示读取管道中的合并结果,再与第三个文件合并
执行上述任意命令后,生成的ideal.txt内容将符合预期:
a 1 2 3 b 2 3 4 c 3 4 5
内容的提问来源于stack exchange,提问作者Cocoa99
相关产品推荐
相关产品推荐

