如何对文本文件中的特定字段进行零填充?

mat*_*123 4 unix awk sed

我有一个这样的文件:

123123213,456,be
124243233,4346,ytr
123123123,436535,uytr
324234324,322,yt
234324323,32,tyutr
Run Code Online (Sandbox Code Playgroud)

我想对中间字段进行零填充以给出结果:

123123213,00000456,be
124243233,00004346,ytr
123123123,00436535,uytr
324234324,00000322,yt
234324323,00000032,tyutr
Run Code Online (Sandbox Code Playgroud)

我如何制作一个可以做到这一点的脚本?

我见过这样的例子

awk '{ $6=sprintf("%06s", $6); print $0}'
Run Code Online (Sandbox Code Playgroud)

但我并不真正理解它,因此无法让它工作。

cYr*_*rus 8

尝试这个:

awk -F , '{ printf "%i,%08i,%s\n" , $1 , $2 , $3 }' file
Run Code Online (Sandbox Code Playgroud)

  • 好的,`-F ,` 告诉 `awk` 使用 `,` 作为字段分隔符,然后它使用自定义格式打印所有三个字段(`$1`、`$2` 和 `$3`):`"%i, %08i,%s\n"`, `%i` 用于整数,`%08i` 将字段宽度设置为 8 位左填充零,而 `%s` 用于字符串。有关更多信息,请参阅 `man printf` 或 [此处](http://en.wikipedia.org/wiki/Printf)。希望这对你有帮助。 (2认同)