2013-05-07 4 views
2

Еще новичок здесь.Как подсчитать уникальные значения уникальных значений в таблице

Как подсчитать уникальные значения уникального набора других значений в таблице, используя bash awk sed и т. Д.? Таким образом, в таблице на два (или более) колонки, такие как это:

AA a 
AA b 
AA c 
AA a 
AB b 
AA a 
AB c 
AA a 
AC b 
AC b 
XX z 

как бы я получить выход

AA 3 
AB 2 
AC 1 
XX 1 

В случае, если второй столбец вывода является подсчет уникальных значений все возможные значения первого столбца;

Итак, есть 6 АА, но только 3 уникальные значения AA и т.д.

Я не хочу использовать SQL. просто Баш программа командной строки, такие как AWK ... любая помощь очень ценится :)

ответ

3

Это будет делать трюк:

$ awk '!a[$0]++{u[$1]++}END{for (k in u) print k,u[k]}' file 
AA 3 
AB 2 
AC 1 
XX 1 

Для обеспечения отсортированной выходной трубы к sort -rnk2 для обратного числового вида на втором поле:

$ awk '!a[$0]++{u[$1]++}END{for (k in u) print k,u[k]}' file | sort -rnk2 
AA 3 
AB 2 
XX 1 
AC 1 

Объяснение:

Мы продолжаем подсчет всех уникальной лин es в ассоциативном массиве a и обновлять вторичный массив u, если мы не видели текущую строку раньше.

+2

Молодцы! Зачем пытаться выяснить код awk, когда sudo_O находится в сети? : D – fedorqui

+0

Спасибо :) Частично правильно это работает только для таблиц из двух столбцов для работы с таблицей из нескольких столбцов (где интересующие столбцы были первыми 2), я сделал: awk '{print $ 1FS $ 2}' file .txt | awk '! a [$ 0] ++ {u [$ 1] ++} END {для (k in u) print k, u [k]}' Есть ли более сжатый способ? Еще раз спасибо –

2

Я думаю, если это возможно, и в других отношениях, здесь не является awk решение:

sort file | uniq | cut -f1 -d' ' | uniq -c | rev 
0
sort -u file | uniq -cw2 | awk '{print $2,$1}' 
+0

Обратите внимание, что это фиксированное решение ширины для первых двух символов на линии. –

Смежные вопросы