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.