-n- дает вам числовую сортировку. Добавлено, так как вы добавили его в своей попытке. Если ваше пользовательское поле является только текстом, оно вам не нужно.
-k3- определяет поле (ключ). пользователь - третье поле.
Как я могу использовать сортировку по 2 столбцам? например, я хочу сначала отсортировать по столбцу 6, а затем - по столбцу 3.
user2452340
1
Это не сработает, если в CSV есть строки в кавычках, содержащие запятые (если столбец, по которому вы хотите выполнить сортировку, не расположен раньше, чем столбец, содержащий запятые). Возможно, вам придется сначала выполнить проход с помощью awk (используя FPAT = "[^,] * | \" [^ \ "] * \" "и OFS =" | "или какой-либо другой разделитель, который можно использовать с сортировкой)
davemyron
1
@ user2452340 Вы можете сделать это: sort -t, -nk3 filename.csv | sort -t, -nk6- сначала он будет отсортировать по столбцу 3, затем отсортирует его по столбцу 6, чтобы столбец 6 был правильно отсортирован полностью, а для любых строк, в которых столбец 6 такой же, они будут отсортированы по столбцу 3 .
Матфея
3
@Matthew sort -t ',' -k3,3n -k6,6nбудет лучше. -k3будет использовать столбец 3 и оставшуюся часть строки.
Кусалананда
1
Мне просто нужен -t, чтобы разделить мой файл с двумя столбцами, разделенными запятыми, спасибо jaypal
Рикардо Ривера Ньевес
20
Используйте awk, чтобы указать идентификатор пользователя впереди.
Сортировать
Используйте sed, чтобы удалить повторяющийся идентификатор пользователя, при условии, что идентификаторы пользователей не содержат пробелов.
Это очень полезно, особенно если вам нужно проанализировать или объединить столбцы, чтобы добавить поле сортировки, а затем сохранить только исходную строку. Я использовал awk / split для анализа / объединения полей даты и времени для сортировки, а затем удаления.
Skytaker
1
sortуже знает, как сортировать по определенному столбцу, но этот метод, известный как преобразование Шварца , полезен, когда поле, по которому вы хотите выполнить сортировку, не является тривиальным четко определенным столбцом.
tripleee
10
Вы можете выбрать разделитель, в этом случае я выбрал двоеточие и напечатал столбец номер один, отсортировав по алфавиту:
sort -t, -k3 file
Ответы:
Как насчет того, чтобы просто
sort
.sort -t, -nk3 user.csv
где
-t,
- определяет ваш разделитель как,
.-n
- дает вам числовую сортировку. Добавлено, так как вы добавили его в своей попытке. Если ваше пользовательское поле является только текстом, оно вам не нужно.-k3
- определяет поле (ключ). пользователь - третье поле.источник
sort -t, -nk3 filename.csv | sort -t, -nk6
- сначала он будет отсортировать по столбцу 3, затем отсортирует его по столбцу 6, чтобы столбец 6 был правильно отсортирован полностью, а для любых строк, в которых столбец 6 такой же, они будут отсортированы по столбцу 3 .sort -t ',' -k3,3n -k6,6n
будет лучше.-k3
будет использовать столбец 3 и оставшуюся часть строки.Используйте sed, чтобы удалить повторяющийся идентификатор пользователя, при условии, что идентификаторы пользователей не содержат пробелов.
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
источник
sort
уже знает, как сортировать по определенному столбцу, но этот метод, известный как преобразование Шварца , полезен, когда поле, по которому вы хотите выполнить сортировку, не является тривиальным четко определенным столбцом.Вы можете выбрать разделитель, в этом случае я выбрал двоеточие и напечатал столбец номер один, отсортировав по алфавиту:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
источник
awk -F, '{ print $3, $0 }' user.csv | sort -nk2
и в обратном порядке
awk -F, '{ print $3, $0 }' user.csv | sort -nrk2
источник
попробуй это -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
ИЛИ
sort -t',' -nk3 user.csv
источник
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
Это должно работать
источник
Чтобы исключить первую строку (заголовок) из сортировки, я разделил ее на два буфера.
df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
источник