0

我有以下文件,当值为数字时,我想在其中用零填充,但在值为字符串时保持原样:

cat test.txt 
2032
12
XXXXX
507
334

这仅适用于数值,字符串被忽略:

awk '{printf "%05d\n",$1}' test.txt 
02032
00012
00000
00507
00334

我可以有条件得到它,但有没有更简单的方法?

awk '{if ($1 ~ /^[0-9]+$/) printf "%05d\n",$1; else printf "%s\n",$1}' test.txt 
02032
00012
XXXXX
00507
00334
4

1 回答 1

4

我认为您的 awk 解决方案还可以。如果您的“更简单”意味着“更短”:

awk '$0*1==$0{$0=sprintf("%05d",$0)}1' file

或者

awk '/^[0-9]+$/{$0=sprintf("%05d",$0)}1' file

或者

awk '$0*1==$0{printf("%05d\n",$0);next}1' file

或者如果您确定文件中没有空行:

awk '$0=$0*1==$0?sprintf("%05d",$0):$0' file

在上面的示例中,我使用了 $0,而不是 $1,因为在您的输入示例中,只有一列。

于 2013-03-20T14:08:03.320 回答