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

上記の例では、入力例では列が 1 つしかないため、$1 ではなく $0 を使用しました。

于 2013-03-20T14:08:03.320 に答える