创建一个数字序列,文件中每行一个


28

有没有办法凭空创建一个由数字序列组成的文件,从给定的数字开始,每行一个?

就像是

magic_command start 100 lines 5 > b.txt

然后,b.txt将是

100
101
102
103
104

无需将其命名为.txt
ixtmixilix 2011年

Answers:


48

已经有一个命令:

seq 100 104

将在单独的行上打印这些数字:

100
101
102
103
104

因此,只需将此输出定向到文件中即可:

seq 100 104 > my_file.txt

并且seq 100 2 104将打印两种,即增量:100102104


wwwwwwwww,你真是个天才。而已。我每秒都爱Unix!谢谢。
SpaceDog 2011年

有什么地方可以了解诸如seq之类的小宝石吗?我对可以凭空创建东西的命令感兴趣,例如数字序列,包含相同文本行x次的文件,可以生成字母“ a,b,c,d ..”序列的命令,例如那。谢谢
SpaceDog

@DigitalRobot:在某个时候,您可能会发现自己只写了perl单行代码。
卡斯卡贝尔2011年

1
@SpaceDog你的爱被放错了地方。seq来自GNU Coreutils,而不是Unix。GNU甚至代表GNU不是Unix!
哈兹2015年

12

Linux附带了seq执行此操作的命令。如果您没有该seq命令,那么它很简单:

i=100; while [ $i -le 104 ]; do echo $i; i=$((i+1)); done >b.txt

或在ksh / bash / zsh中

for ((i=100; i<=104; i++)); do echo $i; done >b.txt

或在zsh中

print -l {100..104} >b.txt

3
我每天越来越爱zsh。
克里斯汀·曼

1
@Gilles您的第一个示例将永远继续,因为您永远不会增加$i
jamesbtate

+1回答操作员实际上无法提出的问题('我没有seq,所以我不能xyz')-这类答案是真正的瑰宝
ixtmixilix

7

重击:

printf '%s\n' {100..105}

perl:

perl -le 'print for 100..104'

公元前:

echo 'for (i = 100 ; i <= 104 ; ++i) i' | bc

直流电:

echo '100 104 sb [p 1 + d lb !<m] sm lm x' | dc

+1之前从未见过有人使用过BC或dc
ixtmixilix

令我
惊讶的

它不必要地复杂,但不是故意的,因此我现在对其进行了简化。
彼得·约翰·阿克兰

1

如果您不介意其中大多数前面的空格:

echo -e {100..104}\\n >numbers-file.txt

没有空格但有一条额外的命令:

echo {100..104} | sed 's/ /\n/g' >numbers-file.txt

编辑红利vim命令(打开vim):

i100[esc]qqyyp[ctrl-a]q2@q:w numbers-file.txt

要获取更多数字,请相应增加2


1
您可以使用printf(1)在行首不获取空格:printf '%s\n' {100..104}
camh 2011年

1

除了使用seqwhileforprintfperlecho如前面的例子,你也可以使用Python

python -c "print list(range(100,105))"

例:

[user@linux ~]~ python -c "print list(range(100,105))"
[100, 101, 102, 103, 104]
[user@linux ~]~ 

创建一个数字序列,每行一个 ...和顺便说一句,这仅适用于python2。
don_crissti
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.