如何用Linux标准命令行工具交替合并两个TSV文件列?
用Linux命令行实现TSV文件列交替合并
没问题,这个需求用awk就能轻松搞定,一行命令就能完成两个TSV文件的列交替合并,完全符合你的要求!
具体命令
假设你的两个文件分别叫file1.tsv和file2.tsv,执行下面的命令就能得到合并后的merged.tsv:
awk -F'\t' -v OFS='\t' 'NR==FNR {lines[NR]=$0; next} { split(lines[NR], a, "\t") split($0, b, "\t") for(i=1; i<=240; i++) { res = res (res ? OFS : "") a[i] OFS b[i] } print res res = "" }' file1.tsv file2.tsv > merged.tsv
命令解释
我给你拆解一下这个命令的逻辑,方便你理解和调整:
-F'\t':指定输入的字段分隔符是制表符,完美匹配TSV格式-v OFS='\t':设置输出的字段分隔符也是制表符,保证输出文件依然是标准TSVNR==FNR {lines[NR]=$0; next}:当处理第一个文件(file1.tsv)时,把每一行的内容存到数组lines里,用行号作为索引,然后直接跳到下一行,不执行后面的逻辑- 处理第二个文件(
file2.tsv)时:- 把
file1对应行的内容拆分成数组a,当前行拆分成数组b - 循环240次(因为你明确说每个文件是240列),每次把
file1的第i列和file2的第i列交替拼接到结果字符串里 - 打印拼接好的整行,然后清空结果字符串处理下一行
- 把
这个命令会严格按照行对应,把两个文件的列一一交替排列,最终得到480列、100行的合并文件。如果两个文件行数不一致,命令会自动以较短的文件行数为准哦。
内容的提问来源于stack exchange,提问作者ko0101
相关产品推荐
相关产品推荐

