如何批量将多份TSV文件的第三列合并至首个文件(支持任意数量)
合并多列TSV文件的解决方案
方法1:使用awk(高效适配任意数量文件)
利用awk按行号存储内容,第一个文件保留完整行,后续文件仅追加第三列,命令如下:
awk ' BEGIN {FS=OFS="\t"} FNR==1 {file_count++} { if (file_count == 1) { line[FNR] = $0 } else { line[FNR] = line[FNR] OFS $3 } } END { for (i=1; i<=FNR; i++) { print line[i] } }' file*.tsv > output.tsv
说明:
file*.tsv会匹配所有以file开头的TSV文件,可根据实际文件名调整匹配规则- 输出文件
output.tsv的行顺序与原文件完全一致,不会出现错位
方法2:使用Shell循环+paste命令
适合文件名有规律的场景,通过循环逐个提取第三列并合并:
# 以第一个文件为基础初始化输出文件 cp file1.tsv output.tsv # 遍历除第一个文件外的所有TSV文件 for file in $(ls file*.tsv | grep -v file1.tsv); do # 提取当前文件第三列,与输出文件合并 paste output.tsv <(cut -f3 "$file") > temp.tsv mv temp.tsv output.tsv done
说明:
- 如果文件名是
file1.tsv、file2.tsv...fileN.tsv,可直接用file{2..N}.tsv替代循环里的文件名匹配 - 每次合并生成临时文件,最后替换原输出文件,实现逐步追加内容
注意事项
- 必须保证所有文件的行数一致,且每行前两列的内容、顺序完全匹配,否则会出现内容错位
- 处理超大文件时优先选择awk方法,避免多次读写临时文件带来的性能损耗
内容的提问来源于stack exchange,提问作者LJG
相关产品推荐
相关产品推荐

