35

bashで、

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10

数字のシーケンスを取得できますが、場合によっては必要です

01 02 03 ... 10

どうすればこれを入手できますか?

どうすれば入手できますか?

001 002 ... 010 011 .. 100
4

10 に答える 10

61

これは、インストールされているマシン上の任意のシェルで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 です

于 2012-08-09T20:11:11.800 に答える
16
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}
于 2012-08-09T20:09:54.950 に答える
5
$ 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のバージョンもインストールされている可能性があり、インプレースで使用できます。

于 2012-08-09T20:22:47.557 に答える
5

awkのみ:

awk 'BEGIN { for (i=0; i<10; i++) printf("%02d ", i) }'
于 2012-08-09T20:22:51.063 に答える
4

これを行う方法はたくさんあります。私の個人的なお気に入りは次のとおりです。

yes | grep y | sed 100q | awk '{printf( "%03d ", NR )}'; echo

明らかに、 もも必要ありません (sedを省略すると を変更する必要があるため、はるかに些細なことです) が、ソリューションの全体的な満足度に貢献します! 最後の行も実際には必要ありませんが、末尾に改行があると便利です。grepgrepsedawkecho

別の良いオプションは次のとおりです。

yes | nl -ba | tr ' ' 0 | sed 100q | cut -b 4-6

または(それほどばかげたことではありませんが):

yes '' | sed ${top-100}q | nl -ba -w ${width-3} -n rz
于 2012-08-09T20:15:09.657 に答える
4

以下は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
于 2012-08-09T20:09:50.830 に答える
3

さんのコメントによれば、seqあなたの友達です。

ただし、注意事項があります。

seq -w2 番目の引数を使用して、使用する形式を設定します。

したがって、コマンド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 orseq -w 01 2 10` 01,03,05,07,09 の場合

于 2015-11-12T09:26:41.370 に答える