Minulla on tämä tiedosto
a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z
Ja minä haluat täsmätä merkkijonon 200 käyttämällä awk
. Joten tulos on
a deiauk Biking US 200 G
Tässä on koodini
awk -F " " "{if($(NF-1) ~ /200/){a[$1]++}}END{for (var in a){print a[var] " " var " " $(NF-1)}}" file.txt
Mutta jälkeen että sain kaikki rivit.
Kommentit
Vastaa
Koska haluat tarkan haun, miksi et käytä ==
?
$ 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
Voit myös rajoittaa otteluasi /^200$/
:
$ awk "$(NF-1)~/^200$/{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1
Muokkaa:
Yritin komentoasi, ja sen pitäisi toimia. Oletko varma -F " "
?
Comm ents
- Kyllä
-F ' '
on hyvä minun mielessäni. En tiedä ' en tiedä miksi, mutta minulla on edelleen sama ongelma
Vastaa
Kun awk
, vain:
awk "$0~/ 200 /" file
Tai sed
(\s
vastaa mitä tahansa tyhjää tilaa):
sed -n "/\s200\s/p" file
A grep
ratkaisu (-P
perl-regexille):
grep -P "\s200\s" file
Jos sen on oltava puhdas bash
:
while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file
Jos et ole varma, onko välilyöntejä, sarkaimia, mitä tahansa ([[:space:]]
on kuin \s
, yllä olevissa sed
– ja grep
-ratkaisuissa ):
while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file
Kommentit
- Kohdassa
grep
se toimii ilman-P
myösgrep '\s200\s' file
vastausta
Luulen thi s auttaa. Tämä tulostaa vain viivan, joka sisältää kuvion. Sinun tapauksessasi kuvio on 200
grep "200" file-name
awk
-koodisi tulostavan Yksittäinen rivi? Halusitko edes ymmärtää, mitä tämän pitäisi tehdä?200
; ii) 1. kenttä ja iii) viimeinen kenttä. Miksi luulet sen tulostavan koko rivin? Mitä tulosta todella saat?