をawkのために先行ゼロを追加します。 $ pdb_1.pdb、$ pdb_2.pdb、...、$ pdb_21.pdbなどですが、$ pdb_01.pdb、$ pdb_02.pdb、...、$ pdb_21.pdbなどの名前のファイルを作成したいと思いますつまり、 "file"変数にパディングゼロを追加することです。は、私はbashのループ「のための」内の以下のawkコマンドを持つ変数
私はprintfをさまざまな方法で使用して成功しなかった。ヘルプは非常に高く評価されます。
をawkのために先行ゼロを追加します。 $ pdb_1.pdb、$ pdb_2.pdb、...、$ pdb_21.pdbなどですが、$ pdb_01.pdb、$ pdb_02.pdb、...、$ pdb_21.pdbなどの名前のファイルを作成したいと思いますつまり、 "file"変数にパディングゼロを追加することです。は、私はbashのループ「のための」内の以下のawkコマンドを持つ変数
私はprintfをさまざまな方法で使用して成功しなかった。ヘルプは非常に高く評価されます。
出力のfile
をsprintf("%02d", file)
に置き換えます。
さらにはfilename = sprintf("%s_%02d.pdb", pdb, file);
のアサイメント全体です。ここで
これまで私は最初のオプションを試してみましたが、それは魅力のように機能します。感謝万円。 – mirix
はawk
で先行ゼロを作成する方法は次のとおりです。
# echo 1 | awk '{ printf("%02d\n", $1) }'
01
# echo 21 | awk '{ printf("%02d\n", $1) }'
21
は(ゼロを含む)必要な桁数の合計で%02
を交換してください。ここ
これは、書式設定された数値を直接出力に出力する場合にのみ有効です。 awkの変数や関数でフォーマットされた番号を使用する場合は、他の答えで述べたように、おそらく 'sprintf'を使う必要があります。 –
は、パラメータに応じてゼロで左関数または右パッド値である:ZEROPAD(値、カウント、方向)
function zeropad(s,c,d) {
if(d!="r")
d="l" # l is the default and fallback value
return sprintf("%" (d=="l"? "0" c:"") "d" (d=="r"?"%0" c-length(s) "d":""), s,"")
}
{ # test main
print zeropad($1,$2,$3)
}
いくつかのテスト:
$ cat test
2 3 l
2 4 r
2 5
a 6 r
テスト:
$ awk -f program.awk test
002
2000
00002
000000
範囲のパラメータが奇妙な結果をもたらす可能性があります。
数字がどれくらい上がるのか分かりますか? 2桁は最大ですか? –