如何对第一列数据进行零填充

时间:2012-10-04 16:39:00

标签: perl unix multiple-columns

我在标签分隔列中有这样的数据:

1   name1   attribute1
1   name1   attribute2
1   name1   attribute3
31  name2   attribute1
31  name2   attribute2
31  name2   attribute3
444 name3   attribute1
444 name3   attribute2
444 name3   attribute3

我希望这样:

001 name1   attribute1
001 name1   attribute2
001 name1   attribute3
031 name2   attribute1
031 name2   attribute2
031 name2   attribute3
444 name3   attribute1
444 name3   attribute2
444 name3   attribute3

我可以在unix或perl中执行此操作吗?

3 个答案:

答案 0 :(得分:5)

perl -i~ -pe's/^(\d+)/sprintf "%03d", $1/e' file

实际上,上面的检查超出了它的需要。这是一个更通用的解决方案:

perl -i~ -pe's/^([^\t]*)/sprintf "%03s", $1/e' file

答案 1 :(得分:1)

Awk和Perl的答案都很棒。我还要在Perl中添加,如果你不提前知道第一列中有多少位数,你可以将“%03d”部分中的“3”替换为包含标量值的标量值。第一列中最长数字的长度。

答案 2 :(得分:0)

这是使用GNU awk的一种方式:

awk -v OFS="\t" '{ $1 = sprintf ("%03d", $1) }1' file.txt