![使用 sed 在 CSV 中向右填充数字](https://linux22.com/image/85197/%E4%BD%BF%E7%94%A8%20sed%20%E5%9C%A8%20CSV%20%E4%B8%AD%E5%90%91%E5%8F%B3%E5%A1%AB%E5%85%85%E6%95%B0%E5%AD%97.png)
我有数千行,如下所示:
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/'
这与以下模式匹配:
- 逗号,
- 正好 10 位数字,
- 逗号,
- 一些数字,
- 一个时期(转义),
- 一些数字,
- 行尾
并将其替换为:
- 逗号,
- 10 位数字(由 反向引用
\1
), - 三个零,
- 逗号,
- 最后一个字段,由 反向引用
\2
。