Cześć arashams! Widziałem, jak ostatnio zadałeś bardzo podobne pytania, które dotyczą tego samego tematu. Jestem pewien, że społeczność chciałaby ci pomóc, ale może mógłbyś pokazać nam, co już próbowałeś i gdzie dokładnie utknąłeś? Wymagamy od ludzi, aby przed zadawaniem pytań wykazali się niewielkim wysiłkiem - nie trzeba się uczyć od zwykłego proszenia innych o podanie kodu dla konkretnej rzeczy. Dlaczego nie powiesz nam, na czym dokładnie polega to tło? Może jest łatwiejszy sposób na osiągnięcie tego, czego chcesz, i nie musimy uciekać się do fałszywych przykładów z abstrakcyjnymi liczbami?
slhck
tnx za pomoc. Pracuję z danymi bgpdump i analizuję je.
Arash
@slhck Komentujesz zasługuje na DUŻO więcej niż mój upvote i jeden inny!
pnuts
Odpowiedzi:
12
Jeśli dane wejściowe są posortowane, możesz użyć uniq:
<infile cut -d' ' -f1 | uniq -c
Jeśli nie, posortuj najpierw:
<infile cut -d' ' -f1 | sort -n | uniq -c
Wydajność:
3 1
1 3
2 52
Dane wyjściowe są zamieniane w porównaniu z wymaganiami, można użyć awk '{ print $2, $1 }' zmienić to.
1 3
3 1
52 2
Jest też idiom awk, który nie wymaga posortowanego wejścia:
awk '{h[$1]++}; END { for(k in h) print k, h[k] }'
Wydajność:
1 3
52 2
3 1
Ponieważ wyjście pochodzi z skrótu, nie zostanie zamówione, przejdź do sort -n jeśli to konieczne:
awk '{h[$1]++} END { for(k in h) print k, h[k] }' | sort -n
Jeśli używasz GNU awk, możesz wykonać sortowanie z poziomu awk:
awk '{h[$1]++} END { n = asorti(h, d, "@ind_num_asc"); for(i=1; i<=n; i++) print d[i], h[d[i]] }'
czy mógłbyś wyjaśnić kod? awk '{h [$ 1] ++} END {dla (k in h) print k, h [k]}' | sort -n
Arash
3
@arashams: The {h[$1]++} blok jest oceniany dla każdej linii. h jest hashem i $1 jest pierwszą kolumną i służy jako klucz do h. Więc to pokazuje, jak często unikalne $1 są widoczne. The END blok jest wykonywany na końcu wejścia i drukuje klucze i wartości. sort -n sortuje wyjście numerycznie.
Odpowiedzi:
Jeśli dane wejściowe są posortowane, możesz użyć uniq:
Jeśli nie, posortuj najpierw:
Wydajność:
Dane wyjściowe są zamieniane w porównaniu z wymaganiami, można użyć
awk '{ print $2, $1 }'
zmienić to.Jest też idiom awk, który nie wymaga posortowanego wejścia:
Wydajność:
Ponieważ wyjście pochodzi z skrótu, nie zostanie zamówione, przejdź do
sort -n
jeśli to konieczne:Jeśli używasz GNU awk, możesz wykonać sortowanie z poziomu awk:
W dwóch ostatnich przypadkach dane wyjściowe to:
źródło
{h[$1]++}
blok jest oceniany dla każdej linii.h
jest hashem i$1
jest pierwszą kolumną i służy jako klucz doh
. Więc to pokazuje, jak często unikalne$1
są widoczne. TheEND
blok jest wykonywany na końcu wejścia i drukuje klucze i wartości.sort -n
sortuje wyjście numerycznie.