dosyada satır başına bir sayı dizisi oluşturma


28

Her satırda bir tane olmak üzere, belirli bir sayıdan başlayarak, bir sayı dizisi olan bir dosya olan ince hava oluşturmanın bir yolu var mı?

gibi bir şey

magic_command start 100 lines 5 > b.txt

ve sonra b.txtolur

100
101
102
103
104

aramaya gerek yok .txt
ixtmixilix

Yanıtlar:


48

Bunun için zaten bir komut var:

seq 100 104

bu numaraları ayrı satırlara yazdıracak:

100
101
102
103
104

Bu yüzden sadece bu çıktıyı bir dosyaya yönlendirin:

seq 100 104 > my_file.txt

ve seq 100 2 104yani iki, artışlarla yazdırır: 100, 102,104


wooooooooooooooooooooooooooooooooooooooooooooooooooooooooo Bu kadar. Her saniye daha fazla unix'i seviyorum! Teşekkürler.
SpaceDog

seq gibi küçük taşlar hakkında öğrenebileceğim bir yer var mı? Sayı dizileri, aynı metin satırını x kez içeren dosyalar gibi ince havadan nesneler yaratabilen komutlar, "a, b, c, d .." harf sıralarını oluşturabilen komutlar, söyledi. teşekkürler
SpaceDog

@DigitalRobot: Bir noktada muhtemelen sadece Perl bir liner yazarken kendinizi bulacaksınız.
Cascabel

1
@SpaceDog Aşkınız yanlış yerleştirilmiş. seqGNU Coreutils'ten, Unix'ten değil. GNU bile GNU'nun Unix olmadığını ifade ediyor!
Kaz

12

Linux seqtam olarak bunu yapan komutla gelir. seqKomutunuz yoksa , kolay bir gömlek.

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

veya ksh / bash / zsh cinsinden

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

veya zsh cinsinden

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

3
Her gün daha fazla zsh seviyorum.
Christian Mann

1
@Gilles ilk örneğiniz sonsuza kadar devam edecek, çünkü asla artış yapmıyorsunuz $i.
jamesbtate

OP sorusunu cevaplamak için +1 aslında sormaya
başlamayacaktı

7

bash:

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

perl:

perl -le 'print for 100..104'

M.Ö:

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

dC:

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

+1 hiç kimsenin bc veya dc kullandığını daha önce hiç görmedi
ixtmixilix

ve bu sizin dc cevabınızın alışılmadık derecede alaycı ve aşırı değere yaklaştığını vurguluyor
ixtmixilix

Gereksiz yere karmaşıktı, ama bilerek değil, bu yüzden şimdi basitleştirdim.
Peter John Acklam

1

Çoğunun önünde boşluk bırakmazsanız:

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

Boşluksuz ama ekstra komutlu:

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

Bonus vim komutu için düzenleme (açık vim):

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

Daha fazla numara için 2uygun şekilde artırın .


1
Satırın başında boşluk bırakmamak için printf (1) printf '%s\n' {100..104}
komutunu kullanabilirsiniz

1

Kullanmanın yanı sıra seq, while, for, printf, perl, echoönceki örnekte gösterildiği gibi, ayrıca Python kullanabilirsiniz

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

Örnek:

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

her satıra bir tane olmak üzere bir sayı dizisi oluşturmak ... ve btw, bu sadece python2 ile çalışır.
don_crissti
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.