sed / awk unix CSV文件修改

我有一个正在接收.csv文件的目录。

column1,column2,column3,columb4
value1,0021,value3,value4,value1,00211,

我要删除标题,将第二列填充到6位数字并添加":",使其为HH:MM:SS格式。例如

value1,00:00:21,00:02:11,

我可以使用awk将字符填充到6位数字,但是我不确定第二个$ 2每2个字符插入一个分号。否则,可以在sed中完全完成此操作吗?哪个对性能更好?

谢谢

dn5681 回答:sed / awk unix CSV文件修改

您可以使用GNU awk完成所有操作:

awk 'BEGIN{FS=OFS=","} {$2=sprintf("%06d",$2); $2=substr($2,1,2) gensub(/.{2}/,":&","g",substr($2,3))}1' file

查看online demo

详细信息

  • BEGIN{FS=OFS=","}-将输入/输出字段分隔符设置为逗号
  • $2=sprintf("%06d",$2)-用零填充字段2
  • $2=substr($2,2)""gensub(/.{2}/,3))-将字段2的值设置为等于字段(substr($2,2))的前两个字符,再加上从第三个字符开始的字段子字符串,在每个两个字符块之前插入:
  • 1-默认打印操作。
,

使用awk格式+替换魔术

awk 'BEGIN{ FS = OFS = "," }
     NR > 1{ $2=sprintf("%06d",$2); gsub(/[0-9]{2}/,"&:",$2); 
             $2=substr($2,8); print }' file

输出:

value1,00:00:21,value3,value4,value1,00:02:11,
,

sed

$ sed -nE '2,$s/,([0-9]+)/,00000\1/;s/,0+(..)(..)(..),/,\1:\2:\3,/p' file

value1,

我认为可以简化一点。

,

使用GNU sed:

sed -r '1d;s/,([^,]+),00000\1,/;s/,[^,]*(..)(..)(..),/' file

输出:

value1,

我对演出一无所知。您可能必须尝试一下。

本文链接:https://www.f2er.com/3106493.html

大家都在问