@Geroge, FWIW, изменил мой ответ так, чтобы порядок вывода соответствовал порядку ввода. Я до сих пор не уверен, как ваше описание «уникальных вхождений первого столбца» становится числами, которые есть в вашем примере.
вая эту входную таблицу:
pac1 xxx
pac1 yyy
pac1 zzz
pac2 xxx
pac2 uuu
pac3 zzz
pac3 uuu
pac4 zzz
Мне нужно добавить частоты в третий столбец, как это:
pac1 xxx 2/3
pac1 yyy 1/3
pac1 zzz 3/3
pac2 xxx 2/2
pac2 uuu 2/2
pac3 zzz 2/2
pac3 uuu 2/2
pac4 zzz 3/1
Где первое число - это число вхождений во втором столбце.
awk '{print $2}' input | sort | uniq -c
И число после косой черты - уникальные вхождения первого столбца:
awk '{print $1}' input | sort | uniq -c
Я хотел бы использовать реализацию в awk.
РЕДАКТИРОВАТЬ:
Пожалуйста, измените вывод - первый столбец - это имена, и мне нужно посчитать, сколько уникальных имен встречается в первом столбце, например
pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 uuu 2/4
pac3 zzz 2/4
pac3 uuu 2/4
pac4 zzz 3/4
Так что уникальными именами являются только pac1, pac2, pac3, pac4 => 4
Что-то вроде этого:
occur=$(awk '{print $1}' input | sort | wc -l)
awk -v occur=$occur '{col2[$2]++} {print $0, col2[$2] "/" occur}' file
A хотел бы избежать появления переменной $.