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)
请帮我处理这个请求
谢谢你
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)