Я хочу выполнить многоуровневую сортировку плавающих значений, используя awk
для данных, как показано ниже:
store:LA----------------400.68
----pens----------------200.34
--------reynolds--------110.34
--------butterflow------90.00
--------trimex----------NA
----copies--------------110.34
--------classmate-------110.34
----pencil--------------90.00
--------HB--------------44.5
--------classmate-------45.5
Числовое значение - это количество доступного запаса.
отсортированный результат должен выглядеть следующим образом:
store:LA----------------400.68
----pencil--------------90.00
--------HB--------------44.5
--------classmate-------45.5
----copies--------------110.34
--------classmate-------110.34
----pens----------------200.34
--------butterflow------90.00
--------reynolds--------110.34
--------trimex----------NA
В порядке возрастания сначала по продукту, а по продукту - по марке со значением NA
в последнем.
Я попытался выбрать значения $2
сначала относительно магазина (так как существует несколько магазинов), затем добавив стоимость товара после значения магазина и в последнем значение бренда и сохранил то же самоев массиве.
Это выглядит примерно так:
400.68
400.68:200.34
400.68:200.34:110.34
400.68:200.34:90.00
400.68:200.34:NA
Использование asort
для этого массива не приводит к требуемому результату:
{
match($0, /^ */);
offset = RLENGTH;
if (offset == 1) { items[NR] = $2 }
else if (offset > prev_ofst) { items[NR] = items[NR-1]":"$2 }
else if (offset < prev_ofst) {
prev_item = items[NR-1];
gsub("(\\:[^:]+\\:[^:]+)$", "", prev_item);
items[NR] = prev_item":"$2;
}
else {
prev_item = items[NR-1];
gsub("(\\:[^:]+)$", "", prev_item);
items[NR] = prev_item" "$2;
}
prev_ofst = offset;
print items[NR];
}
END{
asort(items);
for (i = 1; i <= NR; i++) {
gsub("[^:]+\\:", "", items[i]);
print items[i];
}
}