สร้างลำดับของตัวเลขหนึ่งรายการต่อหนึ่งบรรทัดในไฟล์


28

มีวิธีการสร้างออกมาจากอากาศบางไฟล์ที่เป็นลำดับของตัวเลขเริ่มต้นที่จำนวนที่กำหนดหนึ่งต่อบรรทัด?

สิ่งที่ต้องการ

magic_command start 100 lines 5 > b.txt

แล้วb.txtจะเป็น

100
101
102
103
104

ไม่จำเป็นต้องเรียกว่า. txt
ixtmixilix

คำตอบ:


48

มีคำสั่งสำหรับสิ่งนี้อยู่แล้ว:

seq 100 104

จะพิมพ์ตัวเลขเหล่านี้ในบรรทัดแยก:

100
101
102
103
104

ดังนั้นเพียงแค่ส่งออกตรงนี้เป็นไฟล์:

seq 100 104 > my_file.txt

และseq 100 2 104จะพิมพ์ในการเพิ่มขึ้นของทั้งสองคือ: 100, 102,104


wooooooooooooooooooooooooooooooooooooooooooooooowwwwwwww คุณเป็นอัจฉริยะ แค่นั้นแหละ. ฉันรักยูนิกซ์มากขึ้นทุกวินาที! ขอบคุณ
SpaceDog

มีสถานที่ที่ฉันสามารถเรียนรู้เกี่ยวกับอัญมณีเล็ก ๆ น้อย ๆ เช่น seq หรือไม่? ฉันสนใจคำสั่งที่สามารถสร้างสิ่งต่าง ๆ ออกมาจากอากาศบาง ๆ เช่นลำดับของตัวเลขไฟล์ที่มีบรรทัดข้อความเดียวกัน x ครั้งคำสั่งที่สามารถสร้างลำดับของตัวอักษร "a, b, c, d .. " ที่. ขอบคุณ
SpaceDog

@DigitalRobot: ณ จุดหนึ่งคุณอาจจะพบว่าตัวเองเพิ่งเขียน Perl หนึ่งสมุทร
Cascabel

1
@SpaceDog ความรักของคุณหายไป seqมาจาก GNU Coreutils ไม่ใช่ Unix GNU ย่อมาจาก GNU ไม่ใช่ Not Unix!
Kaz

12

Linux มาพร้อมกับseqคำสั่งที่ทำสิ่งนั้นอย่างแน่นอน หากคุณไม่ได้มีseqคำสั่งมันเป็นหนึ่งซับง่าย:

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

หรือเป็น ksh / bash / zsh

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

หรือใน zsh

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

3
ฉันรัก zsh มากขึ้นทุกวัน
Christian Mann

1
@Gilles $iตัวอย่างแรกของคุณจะยังคงอยู่ตลอดไปเพราะคุณไม่เคยเพิ่มขึ้น
jamesbtate

+1 สำหรับการตอบคำถาม OP จะไม่สามารถถามได้ ('ฉันไม่มี seq ดังนั้นฉันไม่สามารถ xyz') - คำตอบเหล่านั้นคืออัญมณีที่แท้จริง
ixtmixilix

7

ทุบตี:

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

Perl:

perl -le 'print for 100..104'

BC:

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

กระแสตรง:

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

+1 ไม่เคยเห็นใครใช้ bc หรือ dc แบบนั้นมาก่อน
ixtmixilix

และมันทำให้ฉันรู้สึกว่าคำตอบ dc ของคุณเป็นเรื่องแปลกมากและคุ้มค่า
ixtmixilix

มันซับซ้อนโดยไม่จำเป็น แต่ไม่ได้ตั้งใจดังนั้นตอนนี้ฉันได้ทำให้มันง่ายขึ้นแล้ว
Peter John Acklam

1

หากคุณไม่สนใจพื้นที่ด้านหน้าของพวกเขาส่วนใหญ่:

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

ไม่มีพื้นที่ แต่มีคำสั่งพิเศษ:

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

แก้ไขสำหรับคำสั่ง Bonus vim (open vim):

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

สำหรับตัวเลขเพิ่มเติมเพิ่ม2ตาม


1
คุณสามารถใช้ printf (1) ไม่ได้รับพื้นที่ในช่วงเริ่มต้นของบรรทัดนี้:printf '%s\n' {100..104}
camh

1

นอกเหนือจากการใช้seq, while, for, printf, perl, echoดังแสดงในตัวอย่างก่อนหน้านี้คุณยังสามารถใช้งูหลาม

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

ตัวอย่าง:

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

สร้างลำดับของตัวเลขหนึ่งรายการต่อบรรทัด ...และ btw ใช้ได้กับ python2 เท่านั้น
don_crissti
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.