Як використовувати awk сортування за стовпцем 3


90

У мене є такий файл (user.csv)

ip,hostname,user,group,encryption,aduser,adattr

хочу роздрукувати всі сортування стовпців за користувачем,

Я намагався awk -F ":" '{print|"$3 sort -n"}' user.csv, це не працює.


11
sort -t, -k3 file
— Кевін,

Відповіді:


174

Як щодо просто sort.

sort -t, -nk3 user.csv

де

  • -t,- визначає ваш роздільник як ,.

  • -n- дає вам числове сортування. Додано, оскільки ви додали його у своїй спробі. Якщо поле користувача - це лише текст, воно вам не потрібне.

  • -k3- визначає поле (ключ). користувач - це третє поле.


2
Як я можу використовувати стовпці сортування 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, щоб розділити свій файл із 2 стовпцями, розділений комами, дякую Джейпалу
— Рікардо Рівера

20
  1. Використовуйте awk, щоб поставити ідентифікатор користувача попереду.
  2. Сортувати
  3. Використовуйте sed, щоб видалити дублікат ідентифікатора користувача, припускаючи, що ідентифікатори користувачів не містять пробілів.

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

Це дуже корисно, особливо якщо вам потрібно проаналізувати або об'єднати стовпці, щоб додати поле сортування, а потім зберегти лише вихідний рядок. Я використовував awk / split для синтаксичного аналізу / об'єднання полів дати та часу для сортування, а потім видалення.
— skytaker

1
sortвже знає, як сортувати за певним стовпцем, але цей прийом - відомий як перетворення Шварца - корисний, коли поле, за яким потрібно сортувати, не є тривіально чітко визначеним стовпцем.
— триплі

10

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

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

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

і для зворотного порядку

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



0

Щоб виключити перший рядок (заголовок) із сортування, я розділив його на два буфери.

df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.