如何在shell的日期字段中将零添加到个位数日期

Yum*_*Vee 0 bash shell awk ksh

我有如下数据

1213231421312131|USER|21121|1231412|XEM|NAME|NAME|||5072020|2313||||NY|2131|||99|E|||ver.01
6454242352352352|USER|13131|7342422|XEM|NAME|NAME|||13032001|1231||||TX|7312|||11|E|||ver.01
5131242515111233|USER|21212|2314413|XEM|NAME|NAME|||2101979|1231||||TX|7312|||11|E|||ver.01
2341313412341123|USER|62422|1124242|XEM|NAME|NAME|||23111979|1231||||TX|7312|||11|E|||ver.01
Run Code Online (Sandbox Code Playgroud)

我需要如下数据

1213231421312131|USER|21121|1231412|XEM|NAME|NAME|||05072020|2313||||NY|2131|||99|E|||ver.01
6454242352352352|USER|13131|7342422|XEM|NAME|NAME|||13032001|1231||||TX|7312|||11|E|||ver.01
5131242515111233|USER|21212|2314413|XEM|NAME|NAME|||02101979|1231||||TX|7312|||11|E|||ver.01
2341313412341123|USER|62422|1124242|XEM|NAME|NAME|||23111979|1231||||TX|7312|||11|E|||ver.01
Run Code Online (Sandbox Code Playgroud)

所以提交的 10 是一个日期列,我想在日期中添加零... 7 位数到 8 位数。我使用了以下命令,但该命令将管道符号替换为空格。

awk -F "|" '{$10 = sprintf("%08d", $10); print}' <fileName>
Run Code Online (Sandbox Code Playgroud)

请帮我处理这个请求

谢谢你

Soc*_*owi 5

awk有一个输入字段分隔符和一个输出字段分隔符。该print命令使用后者。所以为了保留|符号,OFS也要设置输出字段分隔符:

awk -F\| -v OFS=\| '{$10 = sprintf("%08d", $10); print}' yourFile
Run Code Online (Sandbox Code Playgroud)

或者numfmt来自 GNU coreutils(预装在大多数 Linux 系统上)

numfmt -d\| --field 10 --format %08f < yourFile
Run Code Online (Sandbox Code Playgroud)