我有一个输入文件:
type count
"apples, oranges, bananas" 3
oranges 5
"apples, bananas" 10
"oranges, bananas" 2
我正在尝试计算文件中的苹果,橙子和香蕉的总数(第一列是逗号分隔的)。因此输出应该类似于:
apples 13
oranges 10
bananas 15
我无法想出一个简单的awk表达式来总结拆分列的独特元素。有什么想法吗?
答案 0 :(得分:1)
您根据当前格式更改了输入文件至少两次:
$ cat -t file
type^Icount
"apples, oranges, bananas"^I3
oranges^I5
"apples, bananas"^I10
"oranges, bananas"^I2
注意:cat -t
会将文件中的标签显示为^I
。
这个脚本可以完成这项工作:
$ awk -F'\t' 'NR>1{gsub(/"/,"");n=split($1,s,/, /);for(i=1;i<=n;i++)a[s[i]]+=$2}END{for(k in a) print k,a[k]}' file
apples 13
bananas 15
oranges 10
答案 1 :(得分:1)
这是使用GNU awk实现它的一种方法:
<infile awk -v FS='["\t ,]+' '
NR>1 {
for(i=1; i<NF; i++)
if(length($i)>0)
h[$i] += $NF
}
END { for(k in h) print k, h[k] }'
输出:
apples 13
bananas 15
oranges 10
请注意,您可能需要在输入到达awk之前删除尾随空格:
<infile sed 's/[\t ]*$//' | awk -v FS='["\t ,]+' '
NR>1 {
for(i=1; i<NF; i++)
if(length($i)>0)
h[$i] += $NF
}
END { for(k in h) print k, h[k] }'