Hai dấu tách trường (dấu hai chấm và dấu cách) trong awk


8

Làm thế nào chúng ta có thể chỉ định hai dấu phân cách trường trong lệnh awk khi một trong số chúng là không gian? Tôi nghĩ điều này có thể được thực hiện bằng cách sử dụng một điều kiện if-other được nhúng trong awk, tuy nhiên tôi không chắc chắn về lệnh chính xác.

Tệp mẫu như sau:

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

Tôi muốn in cột thứ hai ($ 2). Sản lượng dự kiến ​​là:

Engineer
Doctor
GovntJob
Master

Khi tôi cố gắng đặt cả không gian và dấu hai chấm làm dấu phân cách trường, nó đã thất bại với lỗi cú pháp:

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

Làm thế nào chúng ta có thể sử dụng hai dấu tách trường và sử dụng chức năng awk?


Ngoài câu trả lời của Yeti, hãy nhớ rằng trình bao tách ra bởi khoảng trắng không được trích dẫn để tạo danh sách các đối số cần đánh thức, vì vậy thay vì -F[ :](một đối số) nó có -F[:]. Biểu đồ này khá tiện dụng (lưu ý các mũi tên dọc cho dấu ngoặc đơn / kép).
arielCo

Cảm ơn ArielCo, rất cảm kích!
Swapnil Dhule

Câu trả lời:


13

Bạn đang đi đúng hướng!
Chỉ cần thêm các trích dẫn còn thiếu xung quanh [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.