Awk'de iki alan ayırıcısı (iki nokta üst üste ve boşluk)


8

Bir tanesi boşluk olduğunda awk komutunda iki alan ayırıcısını nasıl belirleyebiliriz? Ben bu awk gömülü if-else koşulu kullanılarak yapılabilir düşünüyorum, ancak tam komut hakkında emin değilim.

Örnek dosya aşağıdaki gibidir:

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

İkinci sütunu ($ 2) yazdırmak istiyorum. Beklenen çıktı:

Engineer
Doctor
GovntJob
Master

Alan ayırıcılar olarak hem boşluk hem de iki nokta üst üste koymaya çalıştığımda, bir sözdizimi hatasıyla başarısız oldu:

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

İki alan ayırıcısını nasıl kullanabilir ve awk işlevini nasıl kullanabiliriz?


Yeti yanıta ek olarak, tırnaksız boşluklarla kabuk böler böylece yerine, awk için bağımsız değişkenler listesi oluşturmak için unutmayın -F[ :]o var (bir arg) -F[:ve ]. Bu grafik oldukça kullanışlıdır (tek / çift tırnaklar için dikey oklara dikkat edin).
arielCo

Teşekkürler ArielCo, çok takdir etmek!
Swapnil Dhule

Yanıtlar:


13

Doğru yoldasın!
Sadece eksik tırnakları buraya ekleyin [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.