ผมพยายามที่จะคิดออกวิธีการแก้ปัญหาหานี้คำถาม ฉันต้องการที่จะใช้awkสำหรับการแก้ปัญหา
ไฟล์อินพุตของฉันเป็นดังนี้
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
ฉันใช้awkคำสั่งเพื่อแยกค่าที่สองหลังจาก_ดังต่อไปนี้
awk -F "_" '{print $2}' file
อย่างไรก็ตามแม้ว่าคำสั่งข้างต้นจะพิมพ์ค่าที่ถูกต้องฉันได้รับบรรทัดว่างในผลลัพธ์ของฉัน ฉันมี 2 คำถาม
คำถามที่ 1
ฉันจะลบบรรทัดว่างในผลลัพธ์เพื่อให้ได้เฉพาะvenkatและvenkat3ในผลลัพธ์ได้อย่างไร
ถ้าฉันใช้printfแทนที่จะเป็นของprintฉันawkฉันจะได้venkatvenkat3ผลลัพธ์ที่ฉันไม่ต้องการบรรลุ ฉันต้องการผลลัพธ์เช่น
venkat
venkat3
คำถามที่ 2
การใช้ค่าเหล่านั้นเป็นอาเรย์แบบเชื่อมโยงหรือบางอย่างฉันจะค้นหาว่าค่านั้นเกิดขึ้นจริงใน$1คอลัมน์ได้อย่างไร
ฉันต้องการที่จะบรรลุสิ่งที่ต้องการ
awk -F "_" '$2==1{print $1}' file
แก้ไข
ฉันไม่ได้สังเกตawkวิธีแก้ปัญหาของ Stephane มันทำในสิ่งเดียวกันกับที่ฉันได้พูดไปรึเปล่า?
awkไม่ได้ทำในสิ่งเดียวกัน_วิธีการของคุณสันนิษฐานว่าคำเท่านั้นที่สามารถที่มีอยู่ในอีกหากมีการแยกออกจากกัน ในขณะที่เป็นจริงเช่น OP ของทุกคำตอบที่โพสต์ยังจัดการกับกรณีเช่นและไม่เพียง แต่dogliondog_lion