Bash中如何纵向排列数组实现多行数据行转列的表格输出
行转列生成对齐表格方案
你的需求本质是对固定5列的数字输入做矩阵转置,最终输出对齐的规整表格,直接用以下命令即可实现,无需额外生成临时文件,可直接对接你之前sed提取数据的输出流。
可直接复用的命令
如果数据已经存在于清理好的文本文件中,执行:
awk '{for(i=1;i<=NF;i++) res[i] = res[i] (res[i]?"\t":"") $i} END{for(j=1;j<=length(res);j++) print res[j]}' 你的数据文件路径 | column -t
如果是直接接sed提取的管道流,写法如下:
sed '你之前写好的行提取规则' 原始文件路径 | awk '{for(i=1;i<=NF;i++) res[i] = res[i] (res[i]?"\t":"") $i} END{for(j=1;j<=length(res);j++) print res[j]}' | column -t
效果验证
用你给出的样例输入测试:
1 2 3 4 5 5 10 15 20 25 3 6 9 12 15
执行命令后输出完全匹配你的目标结果:
1 5 3 2 10 6 3 15 9 4 20 12 5 25 15
逻辑说明
- awk部分逐行遍历每一列的数字,把同列的数字拼接到同一个结果字段中,字段之间用制表符分隔
- 末尾的
column -t会自动识别制表符分隔的内容,自动调整列宽实现对齐,不需要手动设置空格间隔
内容的提问来源于stack exchange,提问作者Abdur R Nasir
相关产品推荐
相关产品推荐

