ข้อโต้แย้งเชิงลบที่หัว / หาง


14

คำถามที่แตกต่างกันนี้ได้ถูกถามหลายครั้งในที่ต่างกัน แต่ฉันพยายามลบMบรรทัดสุดท้ายออกจากไฟล์โดยไม่มีโชค

ตอบที่สองได้รับการโหวตมากที่สุดในคำถามนี้แนะนำให้ทำดังต่อไปที่จะกำจัดของบรรทัดสุดท้ายในแฟ้ม:

head -n -1 foo.txt > temp.txt

อย่างไรก็ตามเมื่อฉันลองใน OSX & Zsh ฉันจะได้รับ:

head: illegal line count -- -1

ทำไมถึงเป็นอย่างนั้น? ฉันจะเอาM ที่ผ่านมาสายและแรก Nสายของไฟล์ที่กำหนดหรือไม่



1
อะไรคือผลลัพธ์ของhead --version? คุณใช้ระบบอะไร
jofel

@jofel head --versionส่งคืนข้อผิดพลาดจริง
Amelio Vazquez-Reina

คำตอบ:


20

คุณสามารถลบ 12 บรรทัดแรกด้วย:

tail -n +13

(นั่นหมายถึงพิมพ์จากบรรทัดที่ 13)

การใช้งานบางอย่างของการสนับสนุนของheadGNU เช่นhead:

head -n -12

แต่นั่นไม่ได้มาตรฐาน

tail -r file | tail -n +12 | tail -r

จะทำงานกับระบบที่มีtail -r(ดู GNU ด้วยtac) แต่จะดีที่สุดย่อย

อยู่ที่ไหนn1:

sed '$d' file

คุณยังสามารถทำสิ่งต่อไปนี้

sed '$d' file | sed '$d'

เพื่อลบ 2 บรรทัด แต่นั่นไม่ใช่วิธีที่ดีที่สุด

คุณทำได้:

sed -ne :1  -e 'N;1,12b1' -e 'P;D'

แต่ระวังว่าจะไม่สามารถทำงานได้กับค่าขนาดใหญ่ของnกับsedการใช้งานบางอย่าง

ด้วยawk:

awk -v n=12 'NR>n{print line[NR%n]};{line[NR%n]=$0}'

หากต้องการลบmบรรทัดจากจุดเริ่มต้นและnจากจุดสิ้นสุด:

awk -v m=6 -v n=12 'NR<=m{next};NR>n+m{print line[NR%n]};{line[NR%n]=$0}'

sed 'x;1d;$d'อาจใช้เพื่อรับสองบรรทัดสุดท้ายเช่นกัน และNหลังจากนั้นสองสามครั้ง1dก็อาจถูกนำมาใช้เพื่อให้ได้มากกว่านั้นนิดหน่อย แต่ ณ จุดนี้มันไม่ได้มีข้อได้เปรียบในN;P;Dวงที่คุณแนะนำไปแล้ว
mikeserv

ขอบคุณ - คำสั่งสุดท้ายมีประโยชน์อย่างยิ่ง ฤดูร้อนข้อแม้ขนาดเล็ก: มันไม่ทำงานเมื่อmหรือมีn 0มิฉะนั้นมันจะสมบูรณ์แบบ
Amelio Vazquez-Reina

2

คุณสามารถใช้วิธีต่อไปนี้เพื่อลบบรรทัดแรกและบรรทัดสุดท้าย

ด้วยN=5, M=7และไฟล์test.txt:

sed -n -e "6,$(($(wc -l < test.txt) - 7))p" test.txt

คำสั่งพิมพ์บรรทัดทั้งหมดจาก N + 1 ถึง LastLine-M

ตัวเลือกอื่นคือการใช้หลาม:

python -c 'import sys;print "".join(sys.stdin.readlines()[5:-7]),' < test.txt

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