[英]Align columns in comma-separated file
我在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
指定输入分隔符,但输出分隔符始终是空格(除非您具有支持-o
标志的GNU或util-linux之类的版本,请参阅此答案 。)。
使用column -s, -t output.csv
输出就是
"T_Hours" "T_Count" "T_Hours" ...
"00" "446" "00" ...
"01" "159" "01" ...
...
为了保持,
在我们要预先和后处理的输出:
sed
插入一个额外的分隔符:
在每个逗号分隔符的前面。 您选择的角色必须是您输入中不存在的角色。 column -t
指定:
character作为分隔符。 column
将调整所有的列和替换所有:
一个空格。 sed
删除空格(最初是:
我们在第一个命令中插入)。 "T_Hours","T_Count","T_Hours",...
"00" ,"446" ,"00" ,...
"01" ,"159" ,"01" ,...
...
更多信息,请参阅man column
。
$ column -t -s, -o, file
"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"
这可能适合你(GNU sed):
sed -r '1{p;s/[^,]/ /g;h;d};G;s/^/\n/;:a;ta;s/\n([^,])(.*\n)\s/\1\n\2/;ta;s/\n,(.*\n)([^,]*,)/\2\n\1/;ta;P;d' file
这使用第一行的标题来设置列宽。 每个数据列都写在一个空格上,从标题创建的逗号分隔模板。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.