在文件的每一行前面添加前导零

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)

我应该注意我没有写这个命令,我从谷歌那里得到它并且并不真正理解它是如何工作的

way*_*pie 7

方法有很多种,其中一种方法是使用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打印该行。