2013-06-11 3 views

ответ

88

Как насчет только sort.

sort -t, -nk3 user.csv 

где

  • -t, - определяет ваш разделитель, как ,.

  • -n - дает вам численный вид. Добавлено, так как вы добавили его в свою попытку. Если ваше поле пользователя является текстовым, тогда вам это не нужно.

  • -k3 - определяет поле (ключ). пользователь является третьим полем.

+0

Как я могу использовать сорт 2 колонки? например, я хочу сначала сортировать по столбцу 6, а сортировать по столбцу 3 секунды. – user2452340

+0

Это не сработает, если в CSV указаны строки с запятыми (если столбец, который вы хотите отсортировать, раньше, чем столбец, содержащий запятую). Возможно, вам придется сделать первый шаг с awk (используя FPAT = "[^,] * | \" [^ \ "] * \" "и OFS =" | "или какой-либо другой разделитель, который вы можете использовать с сортировкой) – davemyron

+1

@ user2452340 Вы можете сделать это: 'sort -t, -nk3 filename.csv | sort -t, -nk6' - сначала он сортирует по столбцу 3, а затем сортирует его по столбцу 6, поэтому столбец 6 сортируется правильно полностью и для любых строк, где столбец 6 одинаковый, они будут отсортированы по столбцу 3. – Matthew

9
  1. Использование AWK поставить идентификатор пользователя перед.
  2. Сортировка
  3. Используйте sed, чтобы удалить дублированный идентификатор пользователя, при условии, что идентификаторы пользователей не содержат пробелов.

    awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //' 
    
+0

Это очень полезно, особенно если вам нужно разобрать или объединить столбцы, чтобы добавить поле сортировки, а затем сохранить только исходную строку. Я использовал awk/split для разбора/объединения полей даты и времени для сортировать, а затем удалять. – bejota

2
awk -F, '{ print $3, $0 }' user.csv | sort -nk2 

и обратной последовательности

awk -F, '{ print $3, $0 }' user.csv | sort -nrk2 
3

Вы можете выбрать разделитель, в данном случае я выбираю двоеточие и напечатать столбец номер один, сортировка по алфавиту.

awk -f\: '{print $1|"sort -u"}' /etc/passwd 
+0

его -F не ​​-f, но хорошо –

4

попробовать это -

awk '{print $0|"sort -t',' -nk3 "}' user.csv 

ИЛИ

sort -t',' -nk3 user.csv 
Смежные вопросы