ตัวคั่นฟิลด์สองตัว (โคลอนและช่องว่าง) ใน awk


8

เราจะระบุตัวคั่นฟิลด์สองฟิลด์ในคำสั่ง awk เมื่อหนึ่งในนั้นคือช่องว่างได้อย่างไร ฉันคิดว่าสิ่งนี้สามารถทำได้โดยใช้เงื่อนไข if-else ฝังตัวใน awk แต่ฉันไม่แน่ใจเกี่ยวกับคำสั่งที่แน่นอน

ไฟล์ตัวอย่างมีดังนี้:

cat test.txt
Swapnil Engineer 20000
Avinash:Doctor:30000
Dattu GovntJob 50000
Amol:Master:10000

ฉันต้องการพิมพ์คอลัมน์ที่สอง ($ 2) ผลลัพธ์ที่คาดหวังคือ:

Engineer
Doctor
GovntJob
Master

เมื่อฉันพยายามใส่ทั้งช่องว่างและโคลอนเป็นตัวคั่นฟิลด์มันล้มเหลวด้วยข้อผิดพลาดทางไวยากรณ์:

awk -F[ :] '{print $2}' test.txt
awk: cmd. line:1: :]
awk: cmd. line:1: ^ syntax error

เราจะใช้ตัวคั่นฟิลด์สองฟิลด์และใช้ฟังก์ชันการทำงาน awk ได้อย่างไร


นอกเหนือไปจากคำตอบของ Yeti จำไว้ว่าแยกเปลือกโดยช่องว่าง unquoted เพื่อสร้างรายการของการขัดแย้งที่จะ awk ดังนั้นแทนที่จะ-F[ :](หนึ่งหาเรื่อง) มันได้และ-F[: แผนภูมินี้ค่อนข้างมีประโยชน์ (โปรดสังเกตลูกศรแนวตั้งสำหรับเครื่องหมายคำพูดเดี่ยว / คู่) ]
arielCo

ขอบคุณ ArielCo ชื่นชมมาก!
Swapnil Dhule

คำตอบ:


13

คุณมาถูกทางแล้ว!
เพียงเพิ่มคำพูดที่หายไปรอบ ๆ[ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.