ในขณะที่พยายามอ่านหมายเลขเวอร์ชันvimฉันได้รับบรรทัดเพิ่มเติมมากมายที่ฉันต้องเพิกเฉย ฉันพยายามอ่านคู่มือheadและลองใช้คำสั่งต่อไปนี้:
vim --version | head -n 1
ฉันต้องการทราบว่านี่เป็นแนวทางที่ถูกต้องหรือไม่?
ในขณะที่พยายามอ่านหมายเลขเวอร์ชันvimฉันได้รับบรรทัดเพิ่มเติมมากมายที่ฉันต้องเพิกเฉย ฉันพยายามอ่านคู่มือheadและลองใช้คำสั่งต่อไปนี้:
vim --version | head -n 1
ฉันต้องการทราบว่านี่เป็นแนวทางที่ถูกต้องหรือไม่?
vim --version 2>&1 | sed 1q
                :)ตรวจสอบว่าแพ็กเกจของคุณส่งออกข้อมูลที่stderr@WilliamPursell ให้การตรวจสอบหรือไม่
                คำตอบ:
ใช่นั่นเป็นวิธีหนึ่งในการรับบรรทัดแรกของเอาต์พุตจากคำสั่ง
หากคำสั่งส่งออกสิ่งใดเป็นข้อผิดพลาดมาตรฐานที่คุณต้องการจับภาพในลักษณะเดียวกันคุณต้องเปลี่ยนทิศทางข้อผิดพลาดมาตรฐานของคำสั่งไปยังสตรีมเอาต์พุตมาตรฐาน:
utility 2>&1 | head -n 1
มีวิธีอื่นอีกมากมายในการจับบรรทัดแรกด้วยเช่นsed 1q(ออกจากบรรทัดแรก) sed -n 1p(พิมพ์เฉพาะบรรทัดแรก แต่อ่านทุกอย่าง) awk 'FNR == 1'(พิมพ์เฉพาะบรรทัดแรก แต่อ่านทุกอย่างอีกครั้ง) เป็นต้น
ฉันจะใช้:
awk 'FNR <= 1' file_*.txt
ดังที่ @Kusalananda ชี้ให้เห็นว่ามีหลายวิธีในการจับบรรทัดแรกในบรรทัดคำสั่ง แต่การใช้head -n 1อาจไม่ใช่ตัวเลือกที่ดีที่สุดเมื่อใช้สัญลักษณ์แทนเนื่องจากจะพิมพ์ข้อมูลเพิ่มเติม การเปลี่ยน'FNR == i'เป็น'FNR <= i'อนุญาตให้ได้รับ i บรรทัดแรก
ตัวอย่างเช่นหากคุณมี n ไฟล์ชื่อ file_1.txt, ... file_n.txt:
awk 'FNR <= 1' file_*.txt
hello
...
bye
แต่ด้วยheadอักขระตัวแทนพิมพ์ชื่อของไฟล์:
head -1 file_*.txt
==> file_1.csv <==
hello
...
==> file_n.csv <==
bye
head -qn1 file_*.txt