Dua pemisah bidang (titik dua dan spasi) dalam awk

8

Bagaimana kita dapat menentukan dua pemisah bidang dalam perintah awk ketika salah satunya adalah spasi? Saya pikir ini bisa dilakukan dengan menggunakan kondisi if-else tertanam di awk, namun saya tidak yakin tentang perintah yang tepat.

File sampel adalah sebagai berikut:

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

Saya ingin mencetak kolom kedua ($ 2). Output yang diharapkan adalah:

Engineer
Doctor
GovntJob
Master

Ketika saya mencoba menempatkan spasi dan titik dua sebagai pemisah bidang, gagal dengan kesalahan sintaksis:

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

Bagaimana kita bisa menggunakan dua pemisah bidang dan memanfaatkan fungsi awk?

Swapnil Dhule
sumber
Selain jawaban Yeti, ingatlah bahwa shell terbelah oleh spasi putih tanpa tanda kutip untuk membuat daftar argumen untuk awk, jadi alih-alih -F[ :](satu argumen ) ia dapatkan -F[:dan ]. Bagan ini cukup berguna (perhatikan panah vertikal untuk tanda kutip tunggal / ganda).
arielCo
Terima kasih ArielCo, sangat dihargai!
Swapnil Dhule

Jawaban:

13

Anda berada di jalur yang benar!
Tambahkan saja kutipan yang hilang di sekitar [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Swapnil Dhule
sumber