bash sequence 00 01 ... 10

  • 本文关键字:sequence bash bash
  • 更新时间 :
  • 英文 :


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

显然,sedgrep都不是必需的(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

最新更新