使用 sed 在 CSV 中向右填充数字

使用 sed 在 CSV 中向右填充数字

我有数千行,如下所示:

e0f186cf-c34d-42e9-b8a9-9b9cf1f304e7,TotalNumberOfHandledConnectionsOrSessions,TotalNumbe1211008586,1457343000,179.00

最后一列是时间戳。问题是它以秒为单位,而我需要以毫秒为单位。

所以我想用 000 填充该数字。

但是 - 有一天这些行可能会包含毫秒,因此在这种情况下不应添加 000。

我尝试在该网站上使用 sed 的一些示例,但没有成功。

答案1

与(GNU)awk

awk 'BEGIN { FS="," ; OFS="," } { if ( length($4)=10 ) { $4=$4"000" ; print $0 } else print $0 }' file

解释:

  • BEGIN { FS="," ; OFS="," }: 在开头将输入 ( FS) 和输出 ( OFS) 字段分隔符设置为逗号
  • 如果第四列的长度为 10 并添加三个零并打印全部
  • 否则就打印全部

答案2

sed 's/,\([0-9]\{10\}\),\([0-9]*\.[0-9]*\)$/,\1000,\2/'

这与以下模式匹配:

  1. 逗号,
  2. 正好 10 位数字,
  3. 逗号,
  4. 一些数字,
  5. 一个时期(转义),
  6. 一些数字,
  7. 行尾

并将其替换为:

  1. 逗号,
  2. 10 位数字(由 反向引用\1),
  3. 三个零,
  4. 逗号,
  5. 最后一个字段,由 反向引用\2

相关内容