我在标签分隔列中有这样的数据:
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中执行此操作吗?
答案 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