in bash, with
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
我可以得到一个数字序列,但在某些情况下我需要
01 02 03 ... 10
我怎么能得到这个?
我怎样才能得到?
001 002 ... 010 011 .. 100
这将适用于已安装coreutils
机器上的任何 shell(感谢评论者纠正我):
seq -w 1 10
和
seq -w 1 100
解释:
- 选项
-w
将:
根据需要通过用零填充来均衡所有数字的宽度。
-
seq [-w] [-f format] [-s string] [-t string] [first [incr]] last
打印一系列数字,每行一个(默认),从第一个(默认值 1),到尽可能接近最后一个,以增量增量(默认值)递减1). 当第一个大于最后一个时,默认增量为 -1
将 seq 命令与-f
参数一起使用,请尝试:
seq -f "%02g" 0 10
结果:0001020304050607080910
seq -f "%03g" 0 10
结果:00020多岁002003004005006007008009010
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}
for i in {01..99}; do
echo $i
done
将返回 :
01
02
03
04
05
06
07
08
09
10
...
将 01 替换为 001,将 99 替换为 999 或 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
是内置的 shell,但您可能还安装了 coreutils 的一个版本,可以就地使用。
仅 awk:
awk 'BEGIN { for (i=0; i<10; i++) printf("%02d ", i) }'
以下内容将在 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
echo 0{0..9}
您可以得到: 00 01 02 03 04 05 06 07 08 09
echo 0{0..9} 1{0..9}
您可以得到: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
echo 00{0..9} 0{10..99}
你可以得到 001 .. 099
有很多方法可以做到这一点! 我个人最喜欢的是:
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
正如Favoretti评论的那样,seq
是你的朋友。
但有一个警告:
seq -w
使用第二个参数来设置它将使用的格式。
因此,命令seq -w 1 9
将打印序列1 2 3 4 5 6 7 8 9
要打印序列 01 .. 09,您需要执行以下操作:
seq -w 1 09
或者为了清楚起见,在两端使用相同的格式,例如:
001 002 003系列的seq -w 000 010
...010
您还可以使用也可以反向工作的 step 参数:
seq -w 10 -1 01' for 10,09,08...01 or
seq -w 01 2 10' 代表 01,03,05,07,09