tworząc sekwencję liczb, po jednej w wierszu w pliku

29

Czy istnieje sposób na stworzenie z powietrza, pliku, który jest sekwencją liczb, zaczynając od podanej liczby, po jednej w wierszu?

coś jak

magic_command start 100 lines 5 > b.txt

i wtedy b.txtbyłoby

100
101
102
103
104
Kosmiczny pies
źródło
nie trzeba go nazywać .txt
ixtmixilix,

Odpowiedzi:

49

Jest już na to polecenie:

seq 100 104

wypisze te liczby w osobnych wierszach:

100
101
102
103
104

Więc po prostu skieruj to wyjście do pliku:

seq 100 104 > my_file.txt

i seq 100 2 104drukuje w odstępach co dwa, a mianowicie: 100, 102,104

neuron34
źródło
wooooooooooooooooooooooooooooooooooooooowwwwwwwwwwwww, jesteś geniuszem. to jest to! Kocham unix bardziej co sekundę! Dzięki.
SpaceDog,
Czy jest miejsce, w którym mogę dowiedzieć się o małych klejnotach, takich jak Seq? Interesują mnie polecenia, które mogą tworzyć rzeczy z powietrza, takie jak ciąg liczb, pliki zawierające tę samą linię tekstu x razy, polecenia, które mogą generować ciąg liter „a, b, c, d ..”, rzeczy takie jak że. dzięki
SpaceDog
@DigitalRobot: W pewnym momencie prawdopodobnie znajdziesz się w piśmie perl-one-liners.
Cascabel
1
@SpaceDog Twoja miłość jest zgubiona. seqjest z GNU Coreutils, a nie z Uniksa. GNU oznacza nawet, że GNU to nie Unix!
Kaz.
12

Linux jest dostarczany z seqpoleceniem, które właśnie to robi. Jeśli nie masz tego seqpolecenia, jest to prosta liniówka:

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

lub w ksh / bash / zsh

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

lub w zsh

print -l {100..104} >b.txt
Gilles „SO- przestań być zły”
źródło
3
Coraz bardziej uwielbiam Zsh.
Christian Mann
1
@Gilles Twój pierwszy przykład będzie trwał wiecznie, ponieważ nigdy nie zwiększasz $i.
jamesbtate
+1 za odpowiedź na pytanie, którego OP nie byłby w stanie zadać („nie mam seq, więc nie mogę xyz”) - tego rodzaju odpowiedzi są prawdziwymi klejnotami
ixtmixilix,
8

grzmotnąć:

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

perl:

perl -le 'print for 100..104'

pne:

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
źródło
+1 nigdy wcześniej nie widziałem, żeby ktoś używał tego typu bc lub dc
ixtmixilix 29.11.11
i uderza mnie to, że twoja odpowiedź na dc jest wyjątkowo krzykliwa i godna pochwały
ixtmixilix,
Było to niepotrzebnie skomplikowane, ale nie celowe, więc uprościłem to teraz.
Peter John Acklam
1

Jeśli nie przeszkadza ci miejsce przed większością z nich:

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

Bez spacji, ale z dodatkowym poleceniem:

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

Edytuj dla komendy bonusowego vima (otwórz vim):

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

Aby uzyskać więcej liczb, 2odpowiednio zwiększ .

Kevin
źródło
1
Możesz użyć printf (1), aby nie dostać spacji na początku wiersza:printf '%s\n' {100..104}
camh
1

Poza tym za pomocą seq, while, for, printf, perl, echojak pokazano w poprzednim przykładzie, można również użyć Python

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

Przykład:

[user@linux ~]~ python -c "print list(range(100,105))"
[100, 101, 102, 103, 104]
[user@linux ~]~ 
Sabrina
źródło
tworząc sekwencję liczb, po jednej w wierszu ... i btw, działa to tylko z python2.
don_crissti