membuat urutan angka, satu per baris dalam file

29

Apakah ada cara untuk membuat dari udara tipis, file yang merupakan urutan angka, mulai dari angka yang diberikan, satu per baris?

sesuatu seperti

magic_command start 100 lines 5 > b.txt

dan kemudian, b.txtakan menjadi

100
101
102
103
104
SpaceDog
sumber
tidak perlu menyebutnya .txt
ixtmixilix

Jawaban:

49

Sudah ada perintah untuk ini:

seq 100 104

akan mencetak angka-angka ini pada baris yang berbeda:

100
101
102
103
104

Jadi arahkan saja output ini ke file:

seq 100 104 > my_file.txt

dan seq 100 2 104akan mencetak secara bertahap dari dua, yaitu: 100, 102,104

neuron34
sumber
wooooooooooooooooooooooooooooooooooooooowwwwwwwwwww, Anda jenius. Itu dia. Saya suka unix lebih banyak setiap detik! Terima kasih.
SpaceDog
apakah ada tempat di mana saya bisa belajar tentang permata kecil seperti seq? Saya tertarik pada perintah yang dapat membuat hal-hal keluar dari udara, seperti urutan angka, file yang berisi baris teks yang sama x kali, perintah yang dapat menghasilkan urutan huruf "a, b, c, d ..", hal-hal seperti bahwa. terima kasih
SpaceDog
@ DigitalRobot: Pada titik tertentu Anda mungkin akan menemukan diri Anda hanya menulis perl satu-liners.
Cascabel
1
@SpaceDog Cinta Anda salah tempat. seqberasal dari GNU Coreutils, bukan Unix. GNU bahkan singkatan dari GNU is Not Unix!
Kaz 6-15
12

Linux dikirimkan dengan seqperintah yang melakukan hal itu. Jika Anda tidak memiliki seqperintah, ini mudah dilakukan:

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

atau dalam ksh / bash / zsh

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

atau dalam zsh

print -l {100..104} >b.txt
Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
Saya semakin mencintai zsh setiap hari.
Christian Mann
1
@Gilles contoh pertama Anda akan berlanjut selamanya karena Anda tidak pernah bertambah $i.
jamesbtate
+1 untuk menjawab pertanyaan yang sebenarnya tidak bisa ditanyakan oleh OP ('saya tidak punya seq, jadi saya tidak bisa xyz') - jawaban semacam itu adalah permata asli
ixtmixilix
8

pesta:

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

perl:

perl -le 'print for 100..104'

bc:

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

dc:

echo '100 104 sb [p 1 + d lb !<m] sm lm x' | dc
Peter John Acklam
sumber
+1 tidak pernah melihat orang menggunakan bc atau dc seperti itu sebelumnya
ixtmixilix
dan itu mengejutkan saya bahwa jawaban dc Anda luar biasa masam dan patut
diterima
Itu tidak perlu rumit, tetapi tidak sengaja, jadi saya telah menyederhanakannya sekarang.
Peter John Acklam
1

Jika Anda tidak keberatan dengan ruang di depan sebagian besar dari mereka:

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

Tanpa spasi tetapi dengan perintah tambahan:

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

Edit untuk perintah vim bonus (vim terbuka):

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

Untuk angka yang lebih banyak, tambah 2sesuai.

Kevin
sumber
1
Anda dapat menggunakan printf (1) untuk tidak mendapatkan spasi di awal baris:printf '%s\n' {100..104}
camh
1

Selain menggunakan seq, while, for, printf, perl, echoseperti yang ditunjukkan pada contoh sebelumnya, Anda bisa juga menggunakan Python

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

Contoh:

[user@linux ~]~ python -c "print list(range(100,105))"
[100, 101, 102, 103, 104]
[user@linux ~]~ 
Sabrina
sumber
membuat urutan angka, satu per baris ... dan btw, ini hanya berfungsi dengan python2.
don_crissti