วิธีใช้คำสั่ง seq บน Linux
เผยแพร่แล้ว: 2022-01-29 คำสั่ง Linux seq
สร้างรายการตัวเลขในพริบตา แต่ฟังก์ชันนี้จะนำไปใช้จริงได้อย่างไร? เราจะแสดงให้คุณเห็นว่า Seq อาจมีประโยชน์สำหรับคุณอย่างไร
คำสั่ง seq
เมื่อมองแวบแรก คำสั่ง Linux seq
ดูเหมือนจะเป็นเรื่องแปลก ช่วยให้คุณสร้างลำดับของตัวเลขได้อย่างรวดเร็ว แค่นั้นเอง! คีย์เวิร์ดในที่นี้คือ "รวดเร็ว" ในอีกสักครู่ คุณจะเห็นว่าคำสั่งเล็กๆ นี้สามารถรันได้เร็วแค่ไหน
ไม่ว่าจะถูกสร้างขึ้นมาอย่างไร รายการของตัวเลขจะมีประโยชน์เพียงใด? คำสั่ง seq
ถูกเพิ่มเข้ามาใน Unix รุ่นที่ 8 ในปี 1985 นับตั้งแต่นั้นมา มันจึงต้องทำอะไรบางอย่างที่คุ้มค่า
ปรัชญาของ Unix คือมันเต็มไปด้วยยูทิลิตี้เล็กๆ น้อยๆ ที่ทำสิ่งหนึ่งและทำได้ดี หลักการสำคัญประการหนึ่งของปรัชญานี้คือการเขียนโปรแกรมที่รับข้อมูลจากโปรแกรมอื่น แน่นอนว่านั่นก็หมายความว่าโปรแกรมเหล่านี้ต้องสร้างเอาต์พุตที่โปรแกรมอื่นสามารถใช้เป็นอินพุตได้
คำสั่ง seq
มีลักษณะเฉพาะเมื่อใช้กับคำสั่งอื่นๆ ที่ใช้เอาต์พุต ไม่ว่าจะผ่านทางไพพ์หรือการขยายบรรทัดคำสั่ง
การสร้างรายการพื้นฐาน
หากคุณเรียกใช้ seq
ด้วยตัวเลขเดียวเป็นพารามิเตอร์บรรทัดคำสั่ง ระบบจะนับหนึ่งถึงตัวเลขนั้น จากนั้นจะพิมพ์ตัวเลขในหน้าต่างเทอร์มินัล หนึ่งหมายเลขต่อบรรทัด ดังแสดงด้านล่าง:
ตอนที่ 6
หากคุณพิมพ์ตัวเลขสองตัวบนบรรทัดคำสั่ง ตัวแรกจะเป็นหมายเลขเริ่มต้น และตัวที่สองจะเป็นหมายเลขสิ้นสุด ดังที่แสดงด้านล่าง:
ตอนที่ 4 10
คุณสามารถกำหนดขนาดขั้นตอนโดยใส่ตัวเลขที่สาม มันอยู่ระหว่างตัวเลขเริ่มต้นและสิ้นสุด เราพิมพ์ข้อความต่อไปนี้เพื่อ seq
ให้สร้างรายการตัวเลขที่ขึ้นต้นด้วยหก สิ้นสุดที่ 48 และใช้ขั้นตอนที่หก:
ตอนที่ 6 6 48
นับถอยหลัง
เราสามารถขอให้ seq
สร้างรายการตัวเลขจากสูงสุดไปต่ำสุดได้ อย่างไรก็ตาม การจะทำเช่นนั้นได้ เราต้องจัดเตรียมขั้นตอนที่เป็นลบ
คำสั่งต่อไปนี้สร้างรายการที่นับตั้งแต่ 24 ถึง 12 ในขั้นตอนที่ 6 เนื่องจากเราพิมพ์ขั้นตอนเป็นจำนวนลบ:
ตอนที่ 24 -6 12
การนับด้วยทศนิยม
ตัวเลขเริ่มต้น สิ้นสุด และขั้นตอนสามารถเป็นทศนิยมได้ หากตัวเลขใดเป็นทศนิยม ตัวเลขอื่นๆ จะถือเป็นทศนิยมด้วย คำสั่งต่อไปนี้สร้างรายการตัวเลขที่มีขั้นตอน 0.2:
ส่วนที่ 1 0.2 2
ความเร็วของลำดับ
seq
นั้นเร็วมาก—ปัญหาคอขวดเพียงอย่างเดียวคือเวลาที่คุณใช้พิมพ์คำสั่งในหน้าต่างเทอร์มินัล เพื่อทดสอบความเร็ว ลองขอรายการตัวเลข 250,000 ตัว
เราพิมพ์ข้อความต่อไปนี้โดยใช้คำสั่ง time
เพื่อดูว่ากระบวนการใช้เวลานานเท่าใดจึงจะเสร็จสมบูรณ์:
ลำดับเวลา 250,000
ผลลัพธ์จะแสดงด้านล่างรายการ แม้แต่บนพีซีทดสอบที่ใช้พลังงานปานกลางของเรา seq
ก็ยังเร็วจนน่าตกใจ
รายการทั้งหมดถูกสร้างขึ้นและเขียนลงบนหน้าจอในเวลาประมาณ 1/3 ของวินาที หากเราเปลี่ยนเส้นทางรายการไปยังไฟล์ เราสามารถหลีกเลี่ยงค่าใช้จ่ายในการพิมพ์ในหน้าต่างเทอร์มินัลได้
ในการทำเช่นนั้น เราพิมพ์ดังต่อไปนี้:
ลำดับเวลา 250000 > numbers.txt
เวลาที่ใช้ในการสร้างรายการให้เสร็จสมบูรณ์และสร้างไฟล์คือตอนนี้ประมาณ 1/7 วินาที
การใช้ตัวคั่น
อักขระขึ้นบรรทัดใหม่เป็นอักขระเริ่มต้นที่แสดงระหว่างแต่ละหมายเลขในรายการ นั่นเป็นสาเหตุที่ปรากฏเป็นรายการแนวตั้ง โดยแต่ละหมายเลขอยู่ในบรรทัดของตัวเอง หากต้องการ คุณสามารถจัดเตรียมตัวคั่นอื่นได้
ตัวอย่างเช่น สมมติว่าคุณต้องสร้างรายการที่คั่นด้วยเครื่องหมายจุลภาค รายการหารด้วยเครื่องหมายทวิภาค หรือเครื่องหมายวรรคตอนหรือสัญลักษณ์อื่นๆ ที่จริงแล้วตัวคั่นคือสตริง คุณจึงใช้อักขระได้มากกว่าหนึ่งตัว
เราจะใช้ตัวเลือก -s
(ตัวคั่น) คำสั่งต่อไปนี้จะสร้างรายการที่คั่นด้วยเครื่องหมายจุลภาค:
seq s, 6 6 36
คำสั่งนี้จะใช้โคลอน ( :
) เป็นตัวคั่น:
ลำดับ -s: 6 6 36
คำสั่งนี้บอกให้ seq
ใช้ยัติภังค์สองตัว ( -
) เป็นตัวคั่น:
seq -s-- 6 6 36
การใช้รูปแบบสตริง
คำสั่ง seq
ยังสนับสนุนสตริงรูปแบบภาษา C สิ่งเหล่านี้ช่วยให้คุณจัดรูปแบบเอาต์พุตด้วยการควบคุมที่มากกว่าการระบุตัวคั่น ในการใช้สตริงรูปแบบ คุณใช้ตัวเลือก -f
(รูปแบบ)
คำสั่งต่อไปนี้บอกให้ seq
ใช้เลขศูนย์เพื่อแพดเอาต์พุตเป็นอักขระสองตัว:
seq -f "%02g" 6
เราสามารถจัดรูปแบบสตริงด้วยข้อความใดก็ได้ที่เราต้องการ และวางตัวเลขไว้ที่ใดก็ได้ในสตริงดังนี้:
seq -f "หมายเลข %02g ในสตริงรูปแบบคล้าย C" 6
วิธีที่รวดเร็วในการตั้งค่า Zero Padding
วิธีที่เร็วที่สุดในการตั้งค่าช่องว่างภายในเป็นศูนย์คือการใช้ตัวเลือก -w
(ความกว้างเท่ากัน) สิ่งนี้บอกให้ seq
ใช้เลขศูนย์เพื่อเติมตัวเลข ดังนั้นจึงมีความกว้างเท่ากับจำนวนที่มากที่สุด
คำสั่งต่อไปนี้นับตั้งแต่ 0 ถึง 1,000 ในขั้นตอนที่ 100 และตัวเลขทั้งหมดจะถูกเติมด้วยศูนย์:
seq -w 0 100 1000
ตัวเลขที่ยาวที่สุดใช้อักขระสี่ตัว ดังนั้นตัวเลขที่แคบกว่าทั้งหมดจะถูกเติมด้วยศูนย์ตามความกว้างนั้น (แม้แต่ 0 จะถูกเสริมเป็นศูนย์สี่ตัว)
ท่อ seq เป็น bc
โดยการตั้งค่าตัวคั่นเป็นสัญลักษณ์ทางคณิตศาสตร์และไพพ์รายการลงในคำสั่ง bc
เราสามารถประเมินตัวเลขในรายการนั้นได้
คำสั่งต่อไปนี้จะสร้างรายการตัวเลขที่คั่นด้วยเครื่องหมายดอกจัน ( *
) โดยเริ่มจากหนึ่งและลงท้ายด้วยหก:
ลำดับ -s* 6
หากเราป้อนรายการนั้นลงใน bc
จะประเมินรายการโดยใช้เครื่องหมายดอกจัน ( *
) เป็นสัญลักษณ์การคูณ:
seq -s* 6 | bc
เราสามารถทำเช่นนี้กับสัญลักษณ์อื่นๆ ได้เช่นกัน คำสั่งด้านล่างใช้เครื่องหมายบวก ( +
) เพื่อสร้างรายการที่มีการเพิ่มตัวเลขทั้งหมด:
ลำดับ -s+ 5
เราพิมพ์สิ่งต่อไปนี้เพื่อไปป์ที่เป็น bc
และประเมินรายการ:
seq -s+ 5 | bc
การสร้างไฟล์ด้วย seq
คำสั่ง touch
จะอัปเดตการประทับเวลาและวันที่ในไฟล์ หากไม่มีไฟล์ ให้แตะสร้างไฟล์ เราสามารถใช้การขยายบรรทัดคำสั่งด้วยการ touch
และ seq
เพื่อสร้างคอลเลกชันของไฟล์ที่มีชื่อตามหัวข้อ แต่มีหมายเลขต่างกัน
เราจะสร้างชุดไฟล์ 10 ไฟล์ที่มีชื่อฐานเดียวกันและหมายเลขอื่น (ไฟล์-1.txt, ไฟล์-2.txt เป็นต้น) เราพิมพ์ดังต่อไปนี้:
แตะ $(seq -f "file-%g.txt" 1 10)
จากนั้นเราพิมพ์ข้อความต่อไปนี้เพื่อตรวจสอบไฟล์:
ไฟล์ ls*
การใช้ seq ใน Bash Loops
เราสามารถใช้ seq
ในสคริปต์ Bash เพื่อควบคุมลูปด้วยทศนิยม
พิมพ์ข้อความต่อไปนี้ในโปรแกรมแก้ไข แล้วบันทึกเป็น "loops.sh":
#!/bin/bash สำหรับค่าในหน่วย $(seq 5 0.2 6.6); ทำ echo "ค่าตอนนี้คือ $val" เสร็จแล้ว
ต่อไป เราพิมพ์ข้อความต่อไปนี้เพื่อทำให้สคริปต์ใหม่ของเราปฏิบัติการได้:
chmod +x loop.sh
เมื่อเรารันสคริปต์ ตัวนับลูปจะถูกพิมพ์ในหน้าต่างเทอร์มินัล จากนั้นเราสามารถพิมพ์สิ่งต่อไปนี้เพื่อดูตัวนับลูปทศนิยมเพิ่มขึ้นด้วยการวนซ้ำแต่ละครั้ง:
./loop.sh
จำไว้ว่า seq
สามารถนับถอยหลังได้เช่นกัน คุณสามารถใช้สิ่งนั้นในลูปได้ในลักษณะเดียวกัน
ดีและเรียบง่าย
สิ่งหนึ่งที่เกี่ยวกับ seq
คือไม่มีช่วงการเรียนรู้มากนัก มันมีหน้า man
สั้น ๆ ที่สดชื่น แต่คุณยังสามารถใช้งานได้ในรูปแบบที่น่าสนใจ
เนื่องจากเรามักจะต้องสร้างไฟล์ทดสอบอย่างรวดเร็วด้วยขนาดที่เหมือนจริง เราจึงใช้ seq
กับสตริงรูปแบบ จากนั้นเราเปลี่ยนเส้นทางเอาต์พุตเพื่อสร้างไฟล์ที่มีข้อมูลจำลองหลายบรรทัดตามที่เราต้องการ
คำสั่งลินุกซ์ | ||
ไฟล์ | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · เข้าร่วม · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · ดู · strings · พิมพ์ · เปลี่ยนชื่อ · zip · unzip · เมานต์ · umount · ติดตั้ง · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · แพทช์ · แปลง · rclone · ฉีก · srm | |
กระบวนการ | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · หมดเวลา · ผนัง · ใช่ · ฆ่า · หลับ · sudo · su · เวลา · groupadd · usermod · กลุ่ม · lshw · ปิดระบบ · รีบูต · หยุด · poweroff · passwd · lscpu · crontab · วันที่ · bg · fg | |
ระบบเครือข่าย | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ