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

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


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

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

+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.


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

membuat urutan angka, satu per baris ... dan btw, ini hanya berfungsi dengan python2.
don_crissti
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.