Ваш вопрос не совсем ясен, поэтому я просто преобразовал ваш вывод в ваш ввод (при условии, что в вашем выводе есть опечатка, поскольку вы упомянули о подсчете количества 1, 2 и 3 из столбца 2 и показать 2 R,2
). Вам, вероятно, нужно будет немного лучше объяснить свой вопрос -
sort -t "," -k2 < p1.csv |
awk -F, '!z[$2]++{ a[$2]=$0; } END {for (i in a) print z[i], a[i]}' |
sort -k1
Объяснение:
- !z[$2]++ removes the duplicates based on column 2 as awk progresses thru
each line.
- a[$2]=$0 stores the non-duplicates lines in an array
- END {..} looks at all the keys in array and pulls up values. For array a
it pulls up the first line it sees with unique column 2 (as your desired
output). For array z it pulls up number of lines seen with same column 2.
Контрольная работа:
[jaypal:~/temp] cat file
R,3
R,4
S,1
S,2
S,3
R,2
T,4
R,3
ST,4
RST,2
RSTR,4
[jaypal:~/temp] sort -t "," -k2 < t |
awk -F, '!z[$2]++{ a[$2]=$0; } END {for (i in a) print z[i], a[i]}' |
sort -k1
1 S,1
3 R,2
3 R,3
4 R,4
Сортировать с опцией -u
Для поиска уникальных записей на основе столбца вы можете попробовать отсортировать с параметром -u (но это не даст вам подсчета).
Со страницы man
:
-u, --unique
with -c, check for strict ordering;
without -c, output only the first of an equal run
Вы можете попробовать что-то вроде этого -
sort -t, -k2 p1.csv | sort -u -t, -k2
Использование Uniq
Я не уверен, что Uniq можно выполнить для столбца, разделенного разделителем, отличным от пробела. По крайней мере, на моем Mac это не так. Вот ссылка на справочную страницу
-f num Ignore the first num fields in each input line when doing comparisons.
A field is a string of non-blank characters separated
from adjacent fields by blanks. Field numbers are one based,
i.e., the first field is field one.
Поэтому, если вы можете удалить разделитель ,
и запустить следующую команду, вы должны получить желаемый результат.
sort -k2 test | uniq -c -f1
Контрольная работа:
[jaypal:~/temp] cat test
R 3
R 4
S 1
S 2
S 3
R 2
T 4
R 3
ST 4
RST 2
RSTR 4
[jaypal:~/temp] sort -k2 test | uniq -c -f1
1 S 1
3 R 2
3 R 3
4 R 4
person
jaypal singh
schedule
23.05.2013
awk
. Вероятно, вы могли бы сделать что-то гораздо более беспорядочное и действительно требующее скрипта с использованиемuniq
,sort
,grep -c
, иначе это было бы не так эффективно. - person lurker   schedule 24.05.2013ST, T, RST, RSTR
? какой первый столбец в выводе? - person Kent   schedule 24.05.2013