如何将多个文件内容完美排版为列且避免内容错位?
解决多文件列格式排版错位问题
问题出在pr -m的行为上:当合并的文件行数不一致时,短文件耗尽后,后续行不会为该文件的位置保留空占位,导致第4、5行只有file1和file3的内容,column -t会把这两行识别为两列,从而让file3的内容挤占原本file2的列位置,造成重叠。
直接用paste命令替代pr就能解决,paste会自动为短文件的后续行补上空字段,保证每一行都有三列内容,再配合column -t就能完美排版:
paste file1 file2 file3 | column -t
如果需要自定义列分隔符(比如用空格替代默认制表符),可以加-d参数:
paste -d' ' file1 file2 file3 | column -t
如果要手动控制补空行逻辑,可先用awk给短文件补空行到最长行数,再合并:
# 获取三个文件中的最大行数 max_lines=$(printf "%s\n" $(wc -l < file1) $(wc -l < file2) $(wc -l < file3) | sort -n | tail -1) # 补空行后合并并格式化 paste <(awk -v lines="$max_lines" '{print} END{for(i=NR+1;i<=lines;i++) print ""}' file1) \ <(awk -v lines="$max_lines" '{print} END{for(i=NR+1;i<=lines;i++) print ""}' file2) \ <(awk -v lines="$max_lines" '{print} END{for(i=NR+1;i<=lines;i++) print ""}' file3) | column -t
内容的提问来源于stack exchange,提问作者Sreekanth Chityala
相关产品推荐
相关产品推荐

