Учитывая эту входная таблицу:Добавить частоту (число появлений) к моему столику текста через AWK
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
И число после косой черты Uniq вхождения первой колонки:
awk '{print $1}' input | sort | uniq -c
Я хотел бы использовать реализацию в AWK.
EDIT:
Пожалуйста, измените выход - первый столбец имена, и мне нужно, чтобы подсчитать, сколько Uniq имен происходит в первой колонке, как:
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
Так Uniq имена только 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
Потенциальный как избежать переменной $.
спасибо, что поняли. Значит, это означает, что после 'next' awk чтение второго файла обработки? – Geroge
@Geroge это трюк, чтобы прочитать только первый файл. Проверьте мое обновление с дополнительной информацией. – fedorqui
спасибо, что это очень хорошо работает. Не могли бы вы добавить обновление для awk '{print $ 1}' | сортировать | uniq -c - это будет второе число. Вероятно, я могу пропустить сортировку, потому что отсортирован первый столбец. – Geroge