【发布时间】:2014-08-21 06:48:53
【问题描述】:
我有一个包含名称列表的文件。我需要将名称长度设置为 11 个字符。是否有任何单行命令来完成这项工作?
例子:
file1.txt
ABCDE001
ABCDE002
预期:
file1.txt
000ABCDE001
000ABCDE002
【问题讨论】:
我有一个包含名称列表的文件。我需要将名称长度设置为 11 个字符。是否有任何单行命令来完成这项工作?
例子:
ABCDE001
ABCDE002
预期:
000ABCDE001
000ABCDE002
【问题讨论】:
以下 Perl 单行代码可以帮助您:
perl -i -pe 's/(\S+)/("0" x (11 - length $1)) . $1/eg' file.txt
开关:
-i:编辑<> 文件(如果提供扩展名,则进行备份)-p:为输入文件中的每个“行”创建一个 while(<>){...; print} 循环。-e:告诉perl 在命令行上执行代码。【讨论】:
你可以使用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 用于左填充零。
使用 Perl 单行,
perl -pe 's|(\w+)| sprintf("%011s", $1) |e' file1.txt
添加-i 开关以将更改应用到文件。
【讨论】: