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

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

我有一个这样的文件:

123123213,456,be
124243233,4346,ytr
123123123,436535,uytr
324234324,322,yt
234324323,32,tyutr

我想用零填充中间字段以得到结果:

123123213,00000456,be
124243233,00004346,ytr
123123123,00436535,uytr
324234324,00000322,yt
234324323,00000032,tyutr

我如何编写一个可以实现这一功能的脚本?

我见过这样的例子

awk '{ $6=sprintf("%06s", $6); print $0}'

但我不太明白它,因此无法让它工作。

答案1

尝试这个:

awk -F , '{ printf "%i,%08i,%s\n" , $1 , $2 , $3 }' file

答案2

由于您标记了您的问题[sed],因此这里是sed基于脚本的版本这里

sed 's/[^,][^,]*/\n0000000&/2;s/\n[^,]*\(.\{8\}\),/\1,/' inputfile

解释:

  • 一个字段由一组一个或多个非逗号组成:[^,][^,]*(也可以写成[^,]\+
  • 替换第二个字段(匹配)(s///2)一个换行符,一堆零和匹配的内容:\n0000000&(换行符用于标记下一步字段的开始)
  • 现在匹配换行符、零个或多个非逗号以及恰好八个\{8\}任何字符(捕获这些字符\(\)) 后跟逗号
  • 替换捕获的字符\1对于匹配,这将删除临时换行符和多余的零

其工作方式是在字段开头添加多余的零,然后砍掉除

答案3

你问题中的命令是正确的,只需要一些更新。

awk '{ $6=sprintf("%0.8s", $6); print $0}'

也可以更改输出字段分隔符的使用:

awk '{ OFS="\xE7"; $6=sprintf("%0.8s", $6); print $0}'

相关内容