วิธีใช้คำสั่ง seq บน Linux

เผยแพร่แล้ว: 2022-01-29
พร้อมท์เทอร์มินัลบนพีซี Linux
Fatmawati Achmad Zaenuri/Shutterstock

คำสั่ง 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 กับสตริงรูปแบบ จากนั้นเราเปลี่ยนเส้นทางเอาต์พุตเพื่อสร้างไฟล์ที่มีข้อมูลจำลองหลายบรรทัดตามที่เราต้องการ

ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ