Policz różne wartości pola w pliku

17

Mam plik zawierający około miliona wierszy. W wierszach mam pole o nazwie transactionid, które ma powtarzalne wartości. Muszę je wyraźnie policzyć.

Bez względu na to, ile razy wartość się powtarza, należy ją liczyć tylko raz.

Olgun Kaya
źródło
byłoby łatwiej, gdybyś mógł rzucić okiem na format pliku ... niekoniecznie dane.
Nikhil Mulley,
btw, czy chcesz, aby wartość była liczona jako 1, niezależnie od tego, ile razy istnieje, czy chcesz liczbę liczby wystąpień / powtórzeń? jeśli chcesz tylko policzyć to raz, to jak liczone są różne wartości? Czy możesz sprawdzić moją edycję swojego pytania i potwierdzić, czy mam rację w tłumaczeniu ustnym.
Nikhil Mulley
@Nikhil To wynika z pytania:... No matter of how many times a value is repeated, it should be counted as 1. ...
ok, a następnie odpowiedź od @hesse spełni twoje oczekiwania.
Nikhil Mulley,
przepraszam za opóźnienia. Nie miałem połączenia z Internetem. separator wynosi 2 | a pole to pole 28. Użyłem; cat <file_name> | awk -F"|" '{if ((substr($2,0,8)=='20120110')) print $28}' | sort -u | wc -l klauzula if
dotyczyła

Odpowiedzi:

23

OK, zakładając, że plik jest plikiem tekstowym, z polami oddzielonymi przecinkiem „,”. Będziesz także wiedział, które pole 'transactionid'jest pod względem jego pozycji. Zakładając, że twoje 'transactionid'pole jest siódmym polem.

awk -F ',' '{print $7}' text_file | sort | uniq -c

Policzy to różne / niepowtarzalne wystąpienia w 7. polu i wydrukuje wynik.

Nikhil Mulley
źródło
Dlaczego sortprzed uniqrozkazem.
g10guang,
@ g10guang Stało się, uniqaby wyeliminować zapisy, które muszą znajdować się obok siebie.
dsz
3

Może nie jest to najsprytniejsza metoda, ale powinna działać:

awk '{print $1}' your_file | sort | uniq | wc -l

gdzie $1jest liczbą odpowiadającą parsowanemu polu.


źródło
3

Nie ma potrzeby sortowania pliku. ( uniqWymaga sortowania pliku)
Ten skrypt awk zakłada, że ​​pole jest pierwszym polem rozdzielanym spacjami.

awk 'a[$1] == "" { a[$1]="X" } END { print length(a) }' file 
Peter.O
źródło
W przypadku dużego pliku (jak w przypadku zbliżania się do rozmiaru pamięci RAM) awk zużywa dużo pamięci. Większość sortimplementacji została zaprojektowana tak, aby dobrze radzić sobie z dużymi plikami.
Gilles „SO- przestań być zły”