У меня есть этот входной файл ниже, где разделитель полей ir "+", который я хочу отсортировать на уровне 2. Сначала по 3-му полю, а затем по 2-му полю в порядке возрастания.
Вход
240x151+140+624
240x151+462+176
240x151+87+257
240x151+366+355
240x151+77+448
240x151+468+542
178x59+223+65
178x59+417+65
178x59+611+65
178x59+29+65
110x16+255+63
Мой код, который у меня есть до сих пор, ниже, но вывод не то, что мне нужно.
awk '{split($0,f,"+")
a[$0]=f[3];
}END{
n=asorti(a,b)
for (i=1;i<=n;i++)
print b[i]}' file.txt
110x16+255+63
178x59+223+65
178x59+29+65
178x59+417+65
178x59+611+65
240x151+140+624
240x151+366+355
240x151+462+176
240x151+468+542
240x151+77+448
240x151+87+257
Ожидаемый результат, который я хотел бы получить, приведен ниже и иметь возможность обрабатывать массив на основе числовых индексов.
110x16+255+63
178x59+29+65
178x59+223+65
178x59+417+65
178x59+611+65
240x151+462+176
240x151+87+257
240x151+366+355
240x151+77+448
240x151+468+542
240x151+140+624
awk
создайте новый ключ, объединив 3-е и 2-е поля и отсортировав по этому ключу. Однако вам не нужно этого делать, так какsort
уже предназначен для обработки таких случаев. - person karakfa   schedule 29.10.2018