我正在 linux 中编写脚本,脚本的结果是一个 csv 文件。我想格式化这个文件。我的输出文件是:
"T_Hours","T_Count","T_Hours","P_Avg_5","Diffrence_Between_P_Avg_5_and_T_Count"
"00","446","00","533","87"
"01","159","01","224","65"
"02","95","02","140","45"
"03","84","03","117","33"
"04","92","04","113","21"
我想这样输出:
"T_Hours","T_Count","T_Hours","P_Avg_5","Diffrence_Between_P_Avg_5_and_T_Count"
"00" ,"446" ,"00" ,"533" ,"87"
"01" ,"159" ,"01" ,"224" ,"65"
"02" ,"95" ,"02" ,"140" ,"45"
"03" ,"84" ,"03" ,"117" ,"33"
"04" ,"92" ,"04" ,"113" ,"21"
我的尝试:我尝试在 、 之后和之前添加空格,但这不起作用,因为数字并不总是具有相同的宽度;例如,在第二列中可能是数字 "55556"
,因此添加特定数量的空格将不起作用。所以我认为解决方案是将所有行中的字符 ,
移动到第一行的 ,
之下。有什么帮助吗?
最佳答案
这是一种可移植的方式:
sed 's/,/:,/g' output.csv |
column -t -s: |
sed 's/ ,/,/g'
解释:
column -t
对齐列。输入分隔符可以用 -s
指定,但输出分隔符总是一个空格(除非你有像 GNU 或 util-linux 支持的版本-o
标志,参见 this answer .).
使用 column -s, -t output.csv
输出将是
"T_Hours" "T_Count" "T_Hours" ...
"00" "446" "00" ...
"01" "159" "01" ...
...
为了在输出中保留,
,我们必须进行预处理和后处理:
- 使用
sed
在每个逗号分隔符前插入一个额外的分隔符:
。您选择的字符必须是输入中没有的字符。 - 使用
column -t
指定:
字符作为分隔符。column
将对齐所有列并将所有:
替换为空格。 - 使用
sed
删除空格(原来是我们在第一个命令中插入的:
)。
"T_Hours","T_Count","T_Hours",...
"00" ,"446" ,"00" ,...
"01" ,"159" ,"01" ,...
...
更多信息,请参阅 man 专栏
。
关于bash - 对齐逗号分隔文件中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51471554/