Я пытаюсь отсортировать csv-файл, содержащий 3 значения. Первое имеет значение. В нем много раз встречается число 1, 2, 3, 4 и т.п. Но каждое число не появляется столько раз, сколько другое. Итак, я хочу отсортировать csv-файл от его 1-й колонки, от меньшего количества появлений каждого числа до наибольшего количества появлений.
например - я не упоминаю 2-ю и 3-ю строки, потому что я хочу, чтобы он был отсортирован через 1-ю колонку
1
1
1
2
2
2
2
2
3
4
4
->
3
4
4
1
1
1
2
2
2
2
с помощью mac, но я могу получить доступ к linux
вот файл: http://www.mediafire.com/file/v0azlrb3sx9r5x7/example.csv/file
Попробуйте так,
awk 'BEGIN{FS=OFS=","} NR==FNR{s[$1]++} NR>FNR{print s[$1],$0}' csvfile csvfile \
| sort -n | cut -d, -f2-
awk
подсчитает количество вхождений первого поля (s[$1]++
), а затем добавит его (print s[$1],$0
к строкам). (Обратите внимание, что awk
должен прочитать файл дважды). sort -n
отсортирует результатcut -d, -f2-
снова удалит число. Используя Miller (https://github.com/johnkerl/miller), вы можете применить эту команду к своему TSV
mlr --tsv count-similar -g type -o count then sort -n count ./example.csv >./output.tsv
, чтобы получить что-то вроде
+------+-------+-----------+-------+
| type | value | condition | count |
+------+-------+-----------+-------+
| 66 | 0 | hela | 2 |
| 66 | 0 | hela | 2 |
| 23 | 1 | hela | 6 |
| 23 | 1 | hela | 6 |
| 23 | 1 | hela | 6 |
| 23 | 1 | hela | 6 |
| 23 | 1 | hela | 6 |
| 23 | 1 | hela | 6 |
| 27 | 1 | hela | 9 |
| 27 | 1 | hela | 9 |
| 27 | 1 | hela | 9 |
| 27 | 1 | hela | 9 |
| 27 | 1 | hela | 9 |
| 27 | 1 | hela | 9 |
| 27 | 1 | hela | 9 |
| 27 | 1 | hela | 9 |
| 27 | 1 | hela | 9 |
| 34 | 0 | hela | 9 |
| 34 | 0 | hela | 9 |
| 34 | 0 | hela | 9 |
| 34 | 0 | hela | 9 |
| 34 | 0 | hela | 9 |
| 34 | 0 | hela | 9 |
| 34 | 0 | hela | 9 |
| 34 | 0 | hela | 9 |
| 34 | 0 | hela | 9 |
| 2 | 0 | hela | 14 |
| 2 | 0 | hela | 14 |
| 2 | 0 | hela | 14 |
| 2 | 0 | hela | 14 |
| .. | .. | .. | .. |
count-similar -g type
для подсчета и группировки по типу
;-o count
для установки поля выходного подсчета;sort -n count
для сортировки по count
поле.