сортирую csv-файл с 3 колонками

Я пытаюсь отсортировать 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

0
задан 24 September 2020 в 13:38

2 ответа

Попробуйте так,

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- снова удалит число.
1
ответ дан 23 September 2020 в 11:46

Используя 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 поле.
0
ответ дан 27 November 2020 в 22:30

Другие вопросы по тегам:

Похожие вопросы: