我想对以下数据使用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];
}
}
答案 0 :(得分:1)
目前尚不清楚in product based on the brand with NA value in the last.
是什么意思(您是根据样本输入中没有NA值的品牌进行排序,还是根据每行有NA的末尾数字进行排序?值?),但是假设您在发布的预期输出中以错误的顺序排列了“铅笔”和“副本”,这是我想使用GNU awk(您已经在{{ 1}})用于多维数组和sorted_in:
asort()