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


29

Чи є спосіб створити з повітря, файл, який є послідовністю чисел, починаючи з заданого числа, по одному на рядок?

щось на зразок

magic_command start 100 lines 5 > b.txt

і тоді, b.txtбуло б

100
101
102
103
104

не потрібно називати це .txt
ixtmixilix

Відповіді:


49

Для цього вже є команда:

seq 100 104

буде друкувати ці цифри в окремих рядках:

100
101
102
103
104

Тому просто направляйте цей вихід у файл:

seq 100 104 > my_file.txt

і seq 100 2 104почне друкувати зі кроком двох, а саме: 100, 102,104


wooooooooooooooooooooooooooooooooooooooowwwwwwwwwww, ти геній. Це воно. Я люблю Unix більше кожної секунди! Спасибі.
SpaceDog

чи є місце, де я можу дізнатися про маленькі дорогоцінні камені, як seq? Мене цікавлять команди, які можуть створювати речі з повітря, наприклад послідовність чисел, файли, що містять один і той же рядок тексту x разів, команди, які можуть генерувати послідовність літер "a, b, c, d ..", подібні речі що. дякую
SpaceDog

@DigitalRobot: У певний момент ви, мабуть, опинитесь, що ви просто пишете перламутрові вкладиші.
Каскабель

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

або в ksh / bash / zsh

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

або в зш

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

3
Я щодня люблю zsh все більше і більше.
Крістіан Манн

1
@Gilles ваш перший приклад триватиме назавжди, тому що ви ніколи не зростаєте $i.
jamesbtate

+1 для відповіді на питання ОП насправді не зміг би задати ("у мене немає послідовності, тому я не можу") - такі відповіді - справжні дорогоцінні камені
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

і мене вражає те, що ваша відповідь на постійну відповідальність нечасто кривава та піднесена
ixtmixilix

Це було невиправдано складним, але не нарочно, тому я зараз це спростив.
Пітер Джон Аклам

1

Якщо ви не заперечуєте пробіл перед більшістю з них:

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

Без місця, але з додатковою командою:

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

Редагуйте команду bonus vim (відкрити vim):

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

Для більшої кількості збільште 2відповідно.


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 ~]~ 

створення послідовності чисел, по одному на рядок ... і btw, це працює лише з python2.
don_crissti
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.