2017-02-18 19 views
-2

Сортировать по третьей колонке и четвертой колонкеВозможна ли сортировка по нескольким столбцам в awk?

ввода

B,c,3, 
G,h,2, 
J,k,4, 
M,n,,1 

Выходной

M,n,,1 
G,h,2, 
B,c,3, 
J,k,4, 

Пожалуйста, помогите мне

ОБНОВЛЕНО

 awk -F, 'a[$3]<$4{a[$3]=$4;b[$3]=$0}END{for(l in a){print b[l]","l} }' FILE2 

я использовать эту команду и я получает

это

M,n,,1,

,2

,3

,4

+0

вы можете использовать 'gawk' и [Контрольно-Scanning] (https://www.gnu.org /software/gawk/manual/html_node/Controlling-Scanning.html) ..... но .... @Sundeep-решение говорит, что 'sort' лучший выбор, чем' awk' для этого –

+0

Это было перечеркнуто. http://unix.stackexchange.com/q/345883/135943 – Wildcard

ответ

2

sort является лучшим выбором, чем awk здесь

$ sort -t, -k3,3n -k4,4n ip.txt 
M,n,,1 
G,h,2, 
B,c,3, 
J,k,4, 
  • -t, использование , в качестве разделителя
  • -k3,3n сортировать по 3-й колонке, численно
  • -k4,4n затем сортировать по 4-й колонке, численно
+0

HI СПАСИБО ВАМ ЗА ВАШЕ РЕАГИРОВАНИЕ, НО КАК Я МОГУ СДЕЛАТЬ ЭТО В AWK IM ИСПОЛЬЗОВАТЬ ЭТУ КОМАНДУ, НО НЕ РАБОТАЕТ awk -F, '[$ 3] <$ 4 {a [$ 3] = $ 4; b [$ 3] = $ 0} END {для (l in b) {print b [l]}} 'FILE2 –

+0

IM ИСПОЛЬЗОВАНИЕ AWK ПОТОМУ ЧТО ТАКОЕ CROSSPLATFORM с использованием NAWK –

+0

awk -F,' [$ 3] <$ 4 {a [$ 3] = $ 4; b [$ 3] = $ 0} END {для (l in a) {print l "," a [l] "," b [l]}} 'FILE2 –

0

awk на помощь!

$ awk -F, '{a[$3,$4,NR]=$0} 
     END {n=asorti(a,ix); 
      for(k=1;k<=n;k++) print a[ix[k]]}' file 

M,n,,1 
G,h,2, 
B,c,3, 
J,k,4, 

отмечают, что ключ строится в такой способ обработки повторяющихся строк

, если у вас нет asorti здесь обходной путь

$ awk -F, '{a[$0]=$3 FS $4 FS NR RS $0} 
     END {n=asort(a); 
      for(k=1;k<=n;k++) 
       {sub(".*"RS,"",a[k]); 
       print a[k]}}' file 

я использовал RS в качестве вторичного разделителя держите линию отдельно от ключа сортировки. Примечание. Дублированные строки будут считаться одним (дублирующиеся клавиши в порядке). Если вы хотите поддержать повторяющиеся строки изменится на a[$0,NR]

+0

привет очень благодарен, но asort не указано, у меня есть команда, но я не знаю, в этой части я получаю сообщение об ошибке, пожалуйста, см. Мою команду –

+0

это моя команда \t awk -F, 'a [$ 3 ] <$ 4 {a [$ 3] = $ 4; b [$ 3] = $ 0} END {для (l in a) {print l "," a [l] "," b [l]}} 'FILE2 –

+0

ваша команда не кажется правильным, непонятно, что вы сравниваете. См. обновленное решение. – karakfa

0

Я использую эту команду, и она работает:

nawk -F, '{a[$3]<$4;a[$3]=$4;b[$3]=$0} END{for(i in a){print b[i]}}' FILE2