แสดงบรรทัดคี่กับแมวเท่านั้น


28

สวัสดี

อาจเป็นสิ่งนี้ง่ายมาก แต่ฉันไม่ได้รับจุดในขณะนี้ ใน Linux, shell, ได้รับไฟล์ข้อความ, ฉันจะทำอะไรได้บ้าง, ชื่อไฟล์ cat ดังนั้นฉันเห็นเฉพาะบรรทัดแรก, บรรทัดที่สาม, 5, 7, 9 และอื่น ๆ

หากไม่ได้อยู่กับแมวด้วยคำสั่งอื่น

ขอบคุณ

bash 

คำตอบ:


41

การใช้awk:awk 'NR % 2 == 0' filename

แก้ไข: ลบออก{print}ตามที่แสดงในคำตอบของ ghostdog74 และแสดงความคิดเห็นโดย Roberto Bonvallet


1
{print}เป็นการกระทำเริ่มต้นดังนั้นawk 'NR % 2 == 0' < myfileก็เพียงพอแล้ว

3
@roberto ไม่ต้องการเปลี่ยนเส้นทางอินพุต
user31894

1
เช่นเดียวกับบันทึกนี้จะแสดงเส้นคู่ (โดยที่บรรทัดแรกคือ 1) และบรรทัดคี่ (ถ้าคุณคิดว่าบรรทัดแรกเป็น 0) แทนที่2 == 0ด้วย2 == 1สำหรับสิ่งที่ตรงกันข้าม
CDE

13

หรืออะไรทำนองนั้น

sed -n 'p;n' filename

sedสำหรับคำอธิบายมองขึ้นหน้าคนสำหรับ


นี่เป็นsedเวอร์ชั่นพกพาที่ทำให้ฉันปวดใจ
Chris Johnsen

1
คุณสามารถข้ามบรรทัดไปข้างหน้าอย่างง่ายดายด้วยsed -n '1d;p;n'สำหรับคู่ตัวอย่างเช่น
kisp

7

ใช้ sed:

sed -n 1~2p filename

1
นี่คือส่วนขยาย GNU อาจไม่ทำงานกับระบบที่ GNU sedไม่ใช่ค่าเริ่มต้น
Chris Johnsen

จริง แต่ควรจะทำงานร่วมกับ Linux ส่วนใหญ่รสชาติ

อืม .. ฉันเพิ่งลอง "sed --posix -n 1 ~ 2p ชื่อไฟล์" และนั่นก็ใช้ได้เหมือนกัน --posix ควรจะลบการสนับสนุนสำหรับส่วนขยาย gnu

sedคู่มือGNU gnu.org/software/sed/manual/html_node/Addresses.html#Addressesบอกว่า“ ขั้นตอนแรก ~ ส่วนขยาย GNU นี้…” --posixมันไม่ได้พูดถึง เมื่อฉันพยายามgsed --posix -n 1~2p(GNU sed 4.2.1) gsed: -e expression #1, char 2: unknown command: ‘~’ผมได้รับ
Chris Johnsen

ตกลง .. เหมาะสมแล้ว ไม่ทราบว่ามีอะไรผิดปกติกับ sed ของฉัน ฉันใช้ cygwin ดังนั้นอาจมีบางอย่างเกี่ยวข้องกับมัน


2

2 วิธีที่คุณสามารถทำได้ด้วย awk

$ awk '{getline;print}' file # the equivalent of the selected sed answer
$ awk 'NR%2==0' file

หรือมีแค่เปลือกหอย

i=1; while read -r line; do [ $((i++ % 2)) -eq 0 ] && echo $line; done <"file"


0

ยังไม่ได้ทดสอบสิ่งนี้ (ดูเหมือนจะไม่ทำงานบน Mac OS X) แต่ GNU sed รองรับfirst~stepเป็นการเลือกที่อยู่ดังนั้นตัวอย่างเช่น:

sed -n 1~2p file

จะเริ่มที่บรรทัดแรกและพิมพ์บรรทัดอื่นหลังจากนั้น


ใช่นี่คือส่วนขยาย GNU Mac OS X ใช้ BSD sedในการติดตั้งฐาน
Chris Johnsen


-2

คุณสามารถใช้คำสั่งเหล่านี้เพื่อต้องการผลลัพธ์

awk 'NR% 2 == 1'

sed -ne '1 ~ 2p'


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