создание последовательности чисел, по одному на строку в файле

29

Есть ли способ создать из воздуха файл, представляющий собой последовательность чисел, начиная с заданного числа, по одному в строке?

что-то типа

magic_command start 100 lines 5 > b.txt

а затем, b.txtбудет

100
101
102
103
104
Spacedog
источник
не нужно называть это .txt
ixtmixilix

Ответы:

49

Для этого уже есть команда:

seq 100 104

напечатает эти числа в отдельных строках:

100
101
102
103
104

Так что просто направьте этот вывод в файл:

seq 100 104 > my_file.txt

и seq 100 2 104будет печатать с шагом двух, а именно: 100, 102,104

neuron34
источник
вауооооооооооооооооооооооооооооооооооооооооооооооооо деллая представление, гений Вот и все. Я люблю Unix больше каждую секунду! Спасибо.
SpaceDog
Есть ли место, где я могу узнать о таких маленьких драгоценных камнях, как seq? Меня интересуют команды, которые могут создавать вещи из воздуха, такие как последовательность чисел, файлы, содержащие одинаковую текстовую строку x раз, команды, которые могут генерировать последовательность букв "a, b, c, d ..", такие вещи, как что. спасибо
SpaceDog
@DigitalRobot: В какой-то момент вы, вероятно, обнаружите, что просто пишете Perl One-Liners
Каскабель
1
@SpaceDog Ваша любовь неуместна. seqэто из GNU Coreutils, а не Unix. GNU даже означает, что GNU - это не Unix!
Каз
12

Linux поставляется с seqкомандой, которая делает именно это. Если у вас нет seqкоманды, это простая однострочная строка:

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

или в кш / баш / зш

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

или в зш

print -l {100..104} >b.txt
Жиль "ТАК - перестань быть злым"
источник
3
Я люблю зш все больше и больше с каждым днем.
Кристиан Манн
1
@ Жиль, твой первый пример будет продолжаться вечно, потому что ты никогда не увеличиваешь $i.
jamesbtate
+1 за ответ на вопрос, который ОП фактически не смог бы задать («у меня нет seq, поэтому я не могу xyz») - такие ответы - настоящие жемчужины
ixtmixilix
8

Баш:

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
и меня поражает, что ваш ответ 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соответственно.

Kevin
источник
1
Вы можете использовать printf (1), чтобы не получить пробел в начале строки:printf '%s\n' {100..104}
camh
1

Помимо использования seq, while, for, printf,perl , echoкак показано в предыдущем примере, вы можете также использовать Python

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

Пример:

[user@linux ~]~ python -c "print list(range(100,105))"
[100, 101, 102, 103, 104]
[user@linux ~]~ 
Sabrina
источник
создание последовательности чисел, по одному в строке ... и, кстати, это работает только с python2.
don_crissti