2016-03-06 5 views
-1

Может ли uniq -c получить только количество вхождений столбца 2, а затем отсортировать его по количеству вхождений? Кроме того, после сортировки я не хочу показывать количество вхождений. Как это сделать?Uniq -c сортировать по столбцу?

Вот мой пример ввода:

111111111 40 
222222222 50 
333333333 60 
111111111 40 
222222222 60 
333333333 50 

Быть:

222222222 50 
222222222 60 
333333333 50 
333333333 60 
111111111 40 
+1

проверить [прошу]. что вы пытались? –

+0

ваш результат немного странный ... вы можете попробовать использовать опцию 'sort'' -r' (обратный порядок) и '-u' (uniq) для вашего результата .. например,' sort -k2 -r input | sort -k1 -r -u', но результат немного отличается от вашего. – ClaudioM

+0

Твоя спецификация мне не понятна. Предположим, что у вас было 6 дополнительных строк '111 10',' 333 10', '222 10',' 111 10', '222 10',' 444 10' входных данных. Вам понадобится 4 дополнительных строки в конце вывода, причем допустимы '444 10',' 333 10', '222 10' и' 111 10'? Если порядок записей в дополнительном материале имеет значение, каков требуемый порядок (вы должны его зарегистрировать)? Если выход должен быть чем-то другим, вам нужно уточнить, что вам нужно. –

ответ

1
$ cat file 
111111111 40 
222222222 50 
333333333 60 
111111111 40 
222222222 60 
333333333 50 
$ sort file | uniq -c | sort -n -t ' ' -k 1 | awk '{print $2" "$3}' 
222222222 50 
222222222 60 
333333333 50 
333333333 60 
111111111 40 
$ 
  1. sort file | uniq -c дает 3 колонки в порядке: num(occurences) col1 col2
  2. затем sort -n -t ' ' -k 1 сортирует поточный ввод (численно -n в соответствии с NUM (вхождений)) , что ограничена пространством (указанные t переключателя) в соответствии с 2-го колонки/ключ (-k 2)
  3. затем awk '{print $2" "$3}' просто выводит 2-й и 3-й поле удаление числа поля вхождения.
Смежные вопросы