tạo một chuỗi các số, mỗi dòng trong một tệp


28

Có cách nào để tạo ra không khí mỏng, một tập tin là một chuỗi các số, bắt đầu từ một số đã cho, một số trên mỗi dòng không?

cái gì đó như

magic_command start 100 lines 5 > b.txt

và sau đó, b.txtsẽ là

100
101
102
103
104

không cần gọi nó .txt
ixtmixilix

Câu trả lời:


48

Đã có một lệnh cho việc này:

seq 100 104

sẽ in những con số này trên các dòng riêng biệt:

100
101
102
103
104

Vì vậy, chỉ cần hướng đầu ra này vào một tập tin:

seq 100 104 > my_file.txt

seq 100 2 104sẽ in trong từng bước của hai, cụ thể là: 100, 102,104


wooooooooooooooooooooooooooooooooooooooowwwwwwwwwww, bạn là một thiên tài. Đó là nó. Tôi yêu unix hơn mỗi giây! Cảm ơn.
SpaceDog

Có nơi nào tôi có thể tìm hiểu về những viên đá quý nhỏ như seq không? Tôi quan tâm đến các lệnh có thể tạo ra các thứ ngoài không khí mỏng, như chuỗi số, tệp có cùng dòng văn bản x lần, các lệnh có thể tạo chuỗi ký tự "a, b, c, d ..", đại loại như cái đó. cảm ơn
SpaceDog

@DigitalRobot: Tại một số điểm, có lẽ bạn sẽ thấy mình chỉ viết perl one-liners.
Cascabel

1
@SpaceDog Tình yêu của bạn bị đặt không đúng chỗ. seqlà từ GNU Coreutils, không phải Unix. GNU thậm chí là viết tắt của GNU không phải là Unix!
Kaz

12

Linux xuất xưởng với seqlệnh thực hiện chính xác điều đó. Nếu bạn không có seqlệnh, đây là một lệnh dễ dàng:

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

hoặc trong ksh / bash / zsh

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

hoặc trong zsh

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

3
Tôi yêu zsh nhiều hơn và nhiều hơn mỗi ngày.
Christian Mann

1
@Gilles ví dụ đầu tiên của bạn sẽ tiếp tục mãi mãi bởi vì bạn không bao giờ tăng $i.
jamesbtate

+1 để trả lời câu hỏi OP thực sự sẽ không thể hỏi ('tôi không có seq, vì vậy tôi không thể xyz') - những câu trả lời đó là những viên ngọc thực sự
ixtmixilix

7

bash

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

perl:

perl -le 'print for 100..104'

bc:

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

đc:

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

+1 chưa từng thấy ai sử dụng bc hoặc dc như thế trước đây
ixtmixilix

và nó gây ấn tượng với tôi rằng câu trả lời dc của bạn rất kỳ lạ và đáng giá
ixtmixilix

Nó phức tạp không cần thiết, nhưng không có mục đích, vì vậy tôi đã đơn giản hóa nó ngay bây giờ.
Peter John Acklam

1

Nếu bạn không ngại một không gian phía trước hầu hết chúng:

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

Không có không gian nhưng có thêm lệnh:

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

Chỉnh sửa cho lệnh vim tiền thưởng (mở vim):

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

Đối với số lượng nhiều hơn, tăng 2tương ứng.


1
Bạn có thể sử dụng printf (1) để không nhận được khoảng trống ở đầu dòng:printf '%s\n' {100..104}
camh

1

Ngoài việc sử dụng seq, while, for, printf, perl, echonhư trong ví dụ trước, bạn cũng có thể sử dụng Python

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

Thí dụ:

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

tạo một chuỗi các số, một số trên mỗi dòng ... và btw, điều này chỉ hoạt động với python2.
don_crissti
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.