我需要编写一个脚本来计算表中五个最大的影响因素。
我有一个包含32列的表格。我需要计算每列的每个唯一项目的第32列的总和,然后得到五个最大的。
我有一个代码:
awk -f’;’ '{for(i=1;i<=29;i++)sums[$i]+=$32} END{for (i in sums) print sums[i], ":", i}' as.csv | sort -rn
这非常有效(每个唯一项目的第32列总和),但我无法确定哪个总和来自哪一列。
示例列:
Aircraft: Type;Altitude bin;Aircraft: Make/Model;Pilot notified;Damage type
示例输出:
4766 TRUE
4608 A-230
4560 Airplane
4556 Caused damage
3932 FALSE
3773 2
我想知道哪个值来自哪个列:
4766 TRUE - Pilot notified
4608 A-230 - Aircraft: Make/Model
4560 Airplane - Aircraft: Type
4556 Caused damage - Damage type
3932 FALSE - Pilot notified
3773 2 - Altitude bin
答案 0 :(得分:0)
您只需要一个包含列名的数组。你可以用split来制作你的数组。这是一个简单的例子:
line="Aircraft: Type;Altitude bin;Aircraft: Make/Model;Pilot notified;Damage type"
split(line,array,";")
print array[1]
答案 1 :(得分:0)
由于您没有发布输入文件,我根据示例编写了这个。如果summand是最后一列,代码将按原样运行,否则将其更改为正确的索引。
示例数据(第一行具有列名)
Aircraft: Type;Altitude bin;Aircraft: Make/Model;Pilot notified;Damage type;Amount
Airplane;12;A-230;TRUE;Damage;100
Airplane;2;A-230;TRUE;Damage;100
Airplane;2;A-230;TRUE;Damage;100
Airplane;2;A-230;TRUE;Damage;100
Airplane;12;A-230;TRUE;Damage;100
Airplane;2;A-240;TRUE;Damage;100
Airplane;2;A-230;TRUE;Damage;100
Airplane;2;A-230;FALSE;Damage;100
Airplane;2;A-230;FALSE;Damage;100
Airplane;2;A-240;TRUE;Damage;100
Airplane;2;A-230;TRUE;Damage;100
Airplane;2;A-240;TRUE;Damage;100
代码是自我解释的
awk -F";" 'NR==1{for(i=1;i<=NF;i++)h[i]=$i;next}
{for(i=1;i<NF;i++)s[$i" - "h[i]]+=$NF}
END{for(v in s) print s[v], v}' filename
将输出
1200 Damage - Damage type
200 12 - Altitude bin
1000 TRUE - Pilot notified
200 FALSE - Pilot notified
1000 2 - Altitude bin
900 A-230 - Aircraft: Make/Model
1200 Airplane - Aircraft: Type
300 A-240 - Aircraft: Make/Model
管道如前所述进行排序以获得最终结果。