bashで、
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
数字のシーケンスを取得できますが、場合によっては必要です
01 02 03 ... 10
どうすればこれを入手できますか?
どうすれば入手できますか?
001 002 ... 010 011 .. 100
bashで、
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
数字のシーケンスを取得できますが、場合によっては必要です
01 02 03 ... 10
どうすればこれを入手できますか?
どうすれば入手できますか?
001 002 ... 010 011 .. 100
これは、インストールされているマシン上の任意のシェルでcoreutils
機能します(私を修正してくれたコメント投稿者に感謝します):
seq -w 1 10
と
seq -w 1 100
説明:
-w
ようになります。必要に応じてゼロをパディングして、すべての数値の幅を均等にします。
seq [-w] [-f format] [-s string] [-t string] [first [incr]] last
一連の数値を、1 行に 1 つ (デフォルト)、最初 (デフォルト 1) からできるだけ最後に近い位置まで、incr 単位 (デフォルト 1) で出力します。first が last より大きい場合、デフォルトの incr は -1 です
printf "%02d " {1..10} ; echo
出力:
01 02 03 04 05 06 07 08 09 10
同様に:
printf "%03d " {1..100} ; echo
最近のバージョンの bash では、単純に次のようにします。
echo {01..10}
と:
echo {001..100}
$ printf "%02d " {0..10}; echo
00 01 02 03 04 05 06 07 08 09 10
$ printf "%03d " {0..100}; echo
000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100
フォーマット文字列(この場合は2と3)のフィールド幅と、もちろん中括弧の拡張範囲を変更するだけです。echo
フォーマット文字列には改行自体が含まれていないため、これは見た目の目的でのみ使用されます。
printf
はシェルビルトインですが、coreutilsのバージョンもインストールされている可能性があり、インプレースで使用できます。
awkのみ:
awk 'BEGIN { for (i=0; i<10; i++) printf("%02d ", i) }'
これを行う方法はたくさんあります。私の個人的なお気に入りは次のとおりです。
yes | grep y | sed 100q | awk '{printf( "%03d ", NR )}'; echo
明らかに、 もも必要ありません (sed
を省略すると を変更する必要があるため、はるかに些細なことです) が、ソリューションの全体的な満足度に貢献します! 最後の行も実際には必要ありませんが、末尾に改行があると便利です。grep
grep
sed
awk
echo
別の良いオプションは次のとおりです。
yes | nl -ba | tr ' ' 0 | sed 100q | cut -b 4-6
または(それほどばかげたことではありませんが):
yes '' | sed ${top-100}q | nl -ba -w ${width-3} -n rz
以下はbashで動作します
echo {01..10}
**私の周りの答えを編集して、これを追加したかったのですが、どの端末でも機能するコマンドについて話している場合に備えて
yes | head -n 100 | awk '{printf( "%03d ", NR )}' ##for 001...100
また
yes | head -n 10 | awk '{printf( "%03d ", NR )}' ##for 01..10
さんのコメントによれば、seq
あなたの友達です。
ただし、注意事項があります。
seq -w
2 番目の引数を使用して、使用する形式を設定します。
したがって、コマンドseq -w 1 9
はシーケンスを出力します1 2 3 4 5 6 7 8 9
シーケンス 01 .. 09 を印刷するには、次の手順を実行する必要があります。
seq -w 1 09
または、明確にするために、両端で同じ形式を使用します。たとえば、次のようになります。
seq -w 000 010
シリーズ001 002 003 ... 010の場合
また、逆に機能する step 引数を使用することもできます。
seq -w 10 -1 01' for 10,09,08...01 or
seq -w 01 2 10` 01,03,05,07,09 の場合