awk วันละคำ(สั่ง) วันนี้เสนอวิธี …
การดึง 3 ฟิลด์สุดท้ายของแต่ละบรรทัดออกมา
ตัวอย่างเช่น ต้องการ 3 ฟิลด์สุดท้ายของไฟล์ /etc/passwd โดยแต่ละฟิลด์คั่นด้วยเครื่องหมาย :
ตัวอย่างไฟล์ /etc/passwd
$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin ...
ใช้คำสั่ง awk
$ awk 'BEGIN {FS=":"};{print $(NF-2)" "$(NF-1)" "$NF}' /etc/passwd root /root /bin/bash bin /bin /sbin/nologin daemon /sbin /sbin/nologin adm /var/adm /sbin/nologin lp /var/spool/lpd /sbin/nologin ...
คำอธิบาย
- FS (field separators) กำหนดว่าแต่ละฟิลด์คั่นด้วยอะไร ถ้าไม่กำหนดคือคั่นด้วยเว้นวรรค
- NF (total number of fields) จำนวนฟิลด์ของแต่ละบรรทัด
- $NF ฟิลด์สุดท้าย
- $(NF-1) ฟิลด์รองสุดท้าย
- $(NF-2) ฟิลด์ถัดมาจากรองสุดท้าย
ข้อควรระวัง อย่าสับสนระหว่างเครื่องหมายวงเล็บกลม () กลับวงเล็บปีกกา {}
ข้อมูลเพิ่มเติม
- man awk
- Cut Last 3 Fields