-2

我有一个格式为的输入文件:

type   count
"apples, oranges, bananas"   3  
oranges   5  
"apples, bananas"   10  
"oranges, bananas"   2

我正在尝试计算文件中苹果、橙子和香蕉的总数(第一列以逗号分隔)。所以输出应该类似于:

apples   13  
oranges   10  
bananas   15  

我无法想出一个简单的 awk 表达式来总结拆分列的唯一元素。有什么想法吗?

4

2 回答 2

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
于 2013-04-03T16:30:21.537 回答
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] }'
于 2013-04-03T16:31:36.770 回答