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.
text-processing
awk
Olgun Kaya
źródło
źródło
... No matter of how many times a value is repeated, it should be counted as 1. ...
cat <file_name> | awk -F"|" '{if ((substr($2,0,8)=='20120110')) print $28}' | sort -u | wc -l
klauzula ifOdpowiedzi:
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.Policzy to różne / niepowtarzalne wystąpienia w 7. polu i wydrukuje wynik.
źródło
sort
przeduniq
rozkazem.uniq
aby wyeliminować zapisy, które muszą znajdować się obok siebie.Może nie jest to najsprytniejsza metoda, ale powinna działać:
gdzie
$1
jest liczbą odpowiadającą parsowanemu polu.źródło
Nie ma potrzeby sortowania pliku. (
uniq
Wymaga sortowania pliku)Ten skrypt awk zakłada, że pole jest pierwszym polem rozdzielanym spacjami.
źródło
sort
implementacji została zaprojektowana tak, aby dobrze radzić sobie z dużymi plikami.