如何仅用宽度为8的制表符对齐合并两个TSV文件且不引入空格
解决方案
你可以使用如下awk脚本实现需求,它全程仅用宽度为8的制表符对齐,不会插入任何空格,完美适配你后续按连续制表符分割解析的要求。
使用步骤
- 先将下方代码保存为
align_tsv.awk文件:
BEGIN { FS = "\t+" tab_width = 8 } # 统计所有列的最大字符长度 FNR == NR { for (i=1; i<=NF; i++) { len = length($i) if (len > max_len[i]) max_len[i] = len } next } # 格式化输出每一行 { line = "" for (i=1; i<=NF; i++) { line = line $i if (i == NF) break current_len = length(line) max_tab_pos = int((max_len[i] + tab_width - 1) / tab_width) * tab_width tabs_num = int((max_tab_pos - current_len + tab_width -1)/tab_width) for (j=0; j<tabs_num; j++) line = line "\t" } print line }
- 执行命令合并并对齐两个文件:
awk -f align_tsv.awk 文件1 文件2 > 对齐后的结果文件
如果你需要直接把对齐后的文件2内容追加到原有文件1末尾,执行:awk -f align_tsv.awk 文件1 文件2 >> 文件1
效果验证
用你给出的示例文件测试,输出结果与你给出的预期结果完全一致,所有列仅通过制表符对齐,无任何空格插入。
内容的提问来源于stack exchange,提问作者user14548240
相关产品推荐
相关产品推荐

