Dwa separatory pól (dwukropek i spacja) w awk

8

Jak możemy określić dwa separatory pól w poleceniu awk, gdy jednym z nich jest spacja? Myślę, że można to zrobić za pomocą wbudowanego warunku if-else w awk, jednak nie jestem pewien co do dokładnego polecenia.

Przykładowy plik jest jak poniżej:

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

Chcę wydrukować drugą kolumnę (2 USD). Oczekiwany wynik to:

Engineer
Doctor
GovntJob
Master

Gdy próbowałem umieścić zarówno spację, jak i dwukropek jako separatory pól, wystąpił błąd z błędem składni:

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

Jak możemy użyć dwóch separatorów pól i funkcji awk?

Swapnil Dhule
źródło
Oprócz odpowiedzi Yeti pamiętaj, że powłoka dzieli się na nie cytowane białe znaki, aby utworzyć listę argumentów do awk, więc zamiast -F[ :](jednego argumentu) otrzymała -F[:i ]. Ten wykres jest bardzo przydatny (zwróć uwagę na pionowe strzałki dla pojedynczych / podwójnych cudzysłowów).
arielCo
Dzięki ArielCo, bardzo mile widziane!
Swapnil Dhule

Odpowiedzi:

13

Jesteś na dobrej drodze!
Po prostu dodaj brakujące cytaty wokół [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Swapnil Dhule
źródło