Підрахунок подій у першому стовпці файла


10

У нас є цей файл:

1 2 
1 3
1 2
3 3
52 1
52 300

і ще 1000.

Я хочу порахувати кількість разів, коли кожне значення трапляється в першому стовпчику.

1  3 
3  1
52 2

Це означає, що ми бачилися 1тричі.

Як я можу це зробити в Perl, AWK або Bash?


3
Привіт арашами! Нещодавно я бачив, як ви задавали дуже схожі запитання, які обертаються навколо однієї теми. Я впевнений, що громада хотіла б допомогти вам, але, можливо, ви могли б показати нам, що ви вже пробували і де саме ви застрягли? Ми вимагаємо, щоб люди доклали трохи зусиль, перш ніж задавати свої запитання - не існує ніякого навчання, а не просто просити інших дати вам код конкретної речі. Чому б не сказати нам, що саме на цьому тлі? Можливо, є простіший спосіб досягти того, що ви хочете, і нам не потрібно вдаватися до підроблених прикладів з деякими абстрактними цифрами?
slhck

tnx за вашу допомогу. Я працюю з bgpdump даними та аналізую їх.
Араш

Відповіді:


12

Якщо вхід відсортований, ви можете використовувати uniq:

<infile cut -d' ' -f1 | uniq -c

Якщо ні, відсортуйте спочатку:

<infile cut -d' ' -f1 | sort -n | uniq -c

Вихід:

  3 1                                      
  1 3
  2 52

Вихід змінюється в порівнянні з вашими вимогами, ви можете використовувати це awk '{ print $2, $1 }'для зміни.

1 3 
3 1
52 2

Також є ідіома awk, яка не потребує впорядкованого введення:

awk '{h[$1]++}; END { for(k in h) print k, h[k] }'

Вихід:

1 3
52 2
3 1

Оскільки вихідний результат надходить з хеша, він не буде впорядкований, перейдіть до, sort -nякщо це потрібно:

awk '{h[$1]++} END { for(k in h) print k, h[k] }' | sort -n

Якщо ви використовуєте GNU awk, ви можете зробити сортування зсередини awk:

awk '{h[$1]++} END { n = asorti(h, d, "@ind_num_asc"); for(i=1; i<=n; i++) print d[i], h[d[i]] }'

В останніх двох випадках вихід:

1 3
3 1
52 2

tnx .its працював :)
Араш

Ви могли б пояснити код ??? awk '{h [$ 1] ++} END {for (k in h) друкувати k, h [k]}' | сортування -n
Араш

3
@arashams: {h[$1]++}Блок оцінюється для кожного рядка. hє хеш і $1є першим стовпцем і використовується як ключ до h. Тож це розповідає про те, як часто $1бачать унікальні . ENDБлок виконується в кінці введення, і друкує ключі і бирки. sort -nсортує вихідне число.
Тор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.