-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

GNU awk でできる 1 つの方法を次に示します。

<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 に答える