我有一个正在接收.csv文件的目录。
column1,column2,column3,columb4
value1,0021,value3,value4,
value1,00211,value3,value4,
我要删除标题,将第二列填充到6位数字并添加":"
,使其为HH:MM:SS
格式。例如
value1,00:00:21,value3,value4,
value1,00:02:11,value3,value4,
我可以使用awk将字符填充到6位数字,但是我不确定第二个$ 2每2个字符插入一个分号。否则,可以在sed中完全完成此操作吗?哪个对性能更好?
谢谢
答案 0 :(得分:2)
您可以使用GNU awk
完成所有操作:
awk 'BEGIN{FS=OFS=","} {$2=sprintf("%06d", $2); $2=substr($2,1,2) gensub(/.{2}/,":&","g",substr($2,3))}1' file
详细信息
BEGIN{FS=OFS=","}
-将输入/输出字段分隔符设置为逗号$2=sprintf("%06d", $2)
-用零填充字段2 $2=substr($2,1,2)""gensub(/.{2}/,":&","g",substr($2,3))
-将字段2的值设置为等于字段(substr($2,1,2)
)的前两个字符,再加上从第三个字符开始的字段子字符串,在每个两个字符块之前插入:
1
-默认打印操作。答案 1 :(得分:2)
使用awk
格式+替换魔术:
awk 'BEGIN{ FS = OFS = "," }
NR > 1{ $2=sprintf("%06d", $2); gsub(/[0-9]{2}/, "&:", $2);
$2=substr($2, 0, 8); print }' file
输出:
value1,00:00:21,value3,value4,
value1,00:02:11,value3,value4,
答案 2 :(得分:1)
与sed
$ sed -nE '2,$s/,([0-9]+)/,00000\1/;s/,0+(..)(..)(..),/,\1:\2:\3,/p' file
value1,00:00:21,value3,value4,
value1,00:02:11,value3,value4,
我认为可以简化一点。
答案 3 :(得分:-1)
使用GNU sed:
sed -r '1d;s/,([^,]+),/,00000\1,/;s/,[^,]*(..)(..)(..),/,\1:\2:\3,/' file
输出:
value1,00:00:21,value3,value4, value1,00:02:11,value3,value4,
我对演出一无所知。您可能必须尝试一下。