【问题标题】:Adding leading zeros to a string on Linux在 Linux 上为字符串添加前导零
【发布时间】:2014-08-21 06:48:53
【问题描述】:

我有一个包含名称列表的文件。我需要将名称长度设置为 11 个字符。是否有任何单行命令来完成这项工作?

例子:

file1.txt

ABCDE001
ABCDE002

预期:

file1.txt

000ABCDE001
000ABCDE002

【问题讨论】:

    标签: linux perl shell awk


    【解决方案1】:

    以下 Perl 单行代码可以帮助您:

    perl -i -pe 's/(\S+)/("0" x (11 - length $1)) . $1/eg' file.txt
    

    开关

    • -i:编辑<> 文件(如果提供扩展名,则进行备份)
    • -p:为输入文件中的每个“行”创建一个 while(<>){...; print} 循环。
    • -e:告诉perl 在命令行上执行代码。

    【讨论】:

      【解决方案2】:

      你可以使用awk:

      awk '{printf "%0"  11-length($0) "d%s\n", 0, $0}' file
      000ABCDE001
      000ABCDE002
      

      【讨论】:

      • 一切正常!谢谢。你能解释一下它是如何工作的吗?
      • 是的,当然。 11-length($0) 从 11 中减去输入的长度。然后以 printf 格式使用差值,如下所示:printf "%03d%s\n"。这里 3 是差异,%03d 用于左填充零。
      【解决方案3】:

      使用 Perl 单行,

      perl -pe 's|(\w+)| sprintf("%011s", $1) |e' file1.txt
      

      添加-i 开关以将更改应用到文件。

      【讨论】:

        猜你喜欢
        • 2017-08-12
        • 2014-07-13
        • 2013-03-29
        相关资源
        最近更新 更多