awk kısmen dize eşleşmesi (sütun / kelime kısmen eşleşiyorsa)


84

Sahte dosyam şöyle görünüyor:

C1    C2    C3    
1     a     snow   
2     b     snowman 
snow     c     sowman

snow$ 3'te string varsa satır almak istiyorum . Bunu şu şekilde yapabilirim:

awk '($3=="snow" || $3=="snowman") {print}' dummy_file

Ama daha basit bir yol olmalı.

Yanıtlar:


160
awk '$3 ~ /snow/ { print }' dummy_file 

28
kesinlikle, baskı gerekli değil: '$3~/snow/'yeterli
— SheetJS

2
Ne yazık ki bu bağlantı zaten kesildi
— Stedy

Deseniniz "kar", oysa benim durumumda [\ "gibi özel bir sembol varsa, dizin () daha iyi bir çözümdür.
— Qiu Yangfan

Çeki reddetmenin bir yolu var mı? "Yazdır" yerine "sonraki" yi kullanabileceğimizi ve diğer her şeyi yazdırabileceğimizi biliyorum, ancak daha az talimatla bir şeyler kontrol edebileceğimizi biliyorum
— Sahas

5
kullanın! örneğin awk '$ 3! ~ / foo /'
— Ahmed Masud

41

Ayrıca index () işleviyle alt dizeye bakılarak da mümkündür:

awk '(index($3, "snow") != 0) {print}' dummy_file

Daha kısa versiyon:

awk 'index($3, "snow")' dummy_file

7
Bu, Ahmed Mesud'un cevabından daha iyidir, çünkü "kar" kelimesini normal bir ifade olarak değil, gerçek bir dizge olarak işler.
— jarno

6
Daha da basit yazabilirsiniz:awk 'index($3, "snow")' dummy_file
— jarno

2
Bunun cevabımdan daha iyi olduğuna katılıyorum.
— Ahmed Masud


8

Üçüncü alanın sadece snowveya snowmansadece olduğu satırları yazdırın :

awk '$3~/^snow(man)?$/' file

2

GNU sed

sed '/\s*\(\S\+\s\+\)\{2\}\bsnow\(man\)\?\b/!d' file

Giriş:

C1 C2 C3    
1 kar   
2 b kardan adam 
kar sowman
      kar kardan adam

..çıktı:

1 kar
2 b kardan adam

9
Bu oldukça basit bir soruya daha karmaşık bir cevap olamaz.
— Sam

1
Ayrıca, sedtüm kelimeler için kullanmak ÇOK risklidir . Teknik olarak mümkün olsa da, bunun güvenilir bir şekilde çalışması için arkaya bakma, ileriye bakma ve takip etmemesi!? gereken kelimeler söz konusu olduğunda yapıları kullanmak zorunda kaldım . Bu kesin olan kalp zayıflığı için bir şey değil. (Ve onları bulmak ve düzeltmek için bolca zaman harcayabilecek hatalara eğilimli.)
— sözdizimi hatası
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.