У меня есть и файл ввода выглядит следующим образом:
Objects (id: bounding-box centroid area mean-color):
0: 800x800+0+0 406.6,390.9 378792 srgb(0,0,0)
11: 240x151+140+624 259.5,699.0 36240 srgb(255,255,255)
6: 240x151+462+176 581.5,251.0 36240 srgb(255,255,255)
7: 240x151+87+257 206.5,332.0 36240 srgb(255,255,255)
8: 240x151+366+355 485.5,430.0 36240 srgb(255,255,255)
9: 240x151+77+448 196.5,523.0 36240 srgb(255,255,255)
10: 240x151+468+542 587.5,617.0 36240 srgb(255,255,255)
2: 178x59+223+65 311.5,94.0 10502 srgb(255,255,255)
3: 178x59+417+65 505.5,94.0 10502 srgb(255,255,255)
4: 178x59+611+65 699.5,94.0 10502 srgb(255,255,255)
1: 178x59+29+65 117.5,94.0 10502 srgb(255,255,255)
5: 110x16+255+63 309.5,182.5 1760 srgb(255,255,255)
Меня интересует второе поле, например, 2-й элемент второго поля - «240x151 + 140 + 624».Если мы используем в качестве разделителя полей «+» для этого второго поля, тогда будет 3 поля в исходном 2-м поле.Я хочу иметь и массив awk (в данном случае массив "a") с этим вторым полем, отсортированным сначала по 3-му подполю, а затем по второму подполю (где новый FS = "+").
Я делаю это с помощью приведенного ниже кода, и он работает, но мне нужна сначала программа awk, затем труба для сортировки, затем труба снова для второй программы awk.
awk 'NR>2{print $2}' file |
sort -t "+" -k3n -k2n |
awk '{a[NR]=$0} END{
for (i=1;i<=length(a);i++) print a[i] }'
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
Как получить отсортированный массив «a» в одной awk-программе (без конвейера дважды), чтобы иметь возможность выполнять дальнейшую обработку в блоке END {}?
Заранее спасибо