Awk: egyezik a pontos karakterlánccal a

sorban van ez a fájl

a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z 

És én meg akarja egyezni a pontos 200 karakterláncot a awk használatával. Tehát az eredményem

a deiauk Biking US 200 G 

Itt a kódom

awk -F " " "{if($(NF-1) ~ /200/){a[$1]++}}END{for (var in a){print a[var] " " var " " $(NF-1)}}" file.txt 

De miután hogy minden sort megkaptam.

Megjegyzések

  • Miért várod awk kódod nyomtatását egyetlen sor? Fáradtál már azzal, hogy megértsd, mit kell tennie?
  • Az awk kinyomtatja i) hányszor látta ezt az első mezőt, ahol az utolsó előtti mező 200; ii) az 1. mező és a iii) az utolsó előtti mező. Miért várnád, hogy az egész sort kinyomtassa? Milyen kimenetet kapsz valójában?

Válasz

Mivel pontos egyezést szeretne, miért nem használja a == szolgáltatást?

$ cat >file a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z a auie auie 200 B b nrst nrst 200 C $ awk "$(NF-1)==200{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1 

A mérkőzést a következővel is korlátozhatja: /^200$/:

$ awk "$(NF-1)~/^200$/{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1 

Szerkesztés:

Próbáltam a parancsodat, és működnie kell. Biztos benne, hogy -F " "?

Comm Az ents

  • Igen -F ' ' rendben van az ituációmban. Nem tudom ', hogy miért, de még mindig ugyanaz a probléma

Válasz

awk használatával csak:

awk "$0~/ 200 /" file 

Vagy sed (\s illeszkedik bármely szóközhöz):

sed -n "/\s200\s/p" file 

A grep megoldás (-P a per regex számára):

grep -P "\s200\s" file 

Ha tisztának kell lennie bash:

while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file 

Ha nem biztos benne, hogy vannak-e szóközök, fülek ([[:space:]] olyan, mint a \s, a fenti sed és grep megoldásokban ):

while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file 

Megjegyzések

  • A grep -P nélkül is működik, grep '\s200\s' file

Válasz

nélkül

Szerintem ez s segíteni fog. Ez csak a mintát tartalmazó sort nyomtatja ki. Az Ön esetében a minta 200

grep "200" file-name 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük