Mon*_*nor 5 string awk numeric zero-padding
我有一个如下所示的文件:
1:line1
14:line2
135:line3
15:line4
Run Code Online (Sandbox Code Playgroud)
我需要在每行前面添加前导零,使其看起来像这样:
00001:line1
00014:line2
00135:line3
00015:line4
Run Code Online (Sandbox Code Playgroud)
在 Linux 中是否有一种简单的方法可以做到这一点?
我尝试过使用
awk '{printf "%05d:%s\n", FNR, $0}' file
Run Code Online (Sandbox Code Playgroud)
但这输出:
00001:1:line1
00002:14:line2
00003:135:line3
00004:15:line4
Run Code Online (Sandbox Code Playgroud)
我应该注意我没有写这个命令,我从谷歌那里得到它并且并不真正理解它是如何工作的
方法有很多种,其中一种方法是使用awk
awk -F":" '{OFS=FS; $1 = sprintf("%05d", $1); print}' "${filename}"
Run Code Online (Sandbox Code Playgroud)
分解它:
-F":"将字段分隔符设置为“:”,awk会将每个行拆分为列:。OFS=FS将输出字段分隔符设置为字段分隔符,这实际上在我们输出时将“:”放回到每一行中。$1 = sprintf("%05d", $1)将第一列$1本身用 0 填充,长度为 5。print打印该行。