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
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
awk
kódod nyomtatását egyetlen sor? Fáradtál már azzal, hogy megértsd, mit kell tennie?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?