-3

問題:

私はいくつかの数字と文字を含む以下のようなファイルを持っています

  1. フィールド: IP が見つかった回数 ( 69.175.54.106= 17)
  2. フィールド: IP アドレス、
  3. フィールド: 国名 ( US- アメリカ、CN- 中国など)、

以下に示すように、IP69.175.54.106は 283 回解決されましたが、17 回解決されなかったので、最初のフィールドと一致した 2 番目のフィールドを合計し、3 番目のフィールドは国名として存在する必要があります

17, 69.175.54.106,
283, 69.175.54.106, US
77, 58.77.59.10, CN
23, 58.77.59.10, 

出力は次のようになります。

300, 69.175.54.106, US
100, 58.77.59.10, CN
4

1 に答える 1

2

このようなものがうまくいくかもしれません:

awk 'BEGIN {FS=", *"}
{sum[$2]+=$1 }
! country[$2] && $3 != "" {country[$2] = $3}
END { for ( k in sum ) { print sum[k] ", " k ", " country[k] } }' INPUTFILE

Ideone.com で実際の動作をご覧ください

1行ずつ

  1. ブロックでBEGINフィールド区切りを設定します(不要なスペースを取り除くため)
  2. 行ごとに、IP によってインデックス付けされた配列に時間を追加します
  3. 国コードがまだ保存されておらず、3 番目のファイルが空でない場合は、別の配列に保存します (IP によってインデックスが作成されます)。
  4. 最後に、すべての IP について、合計、IP、および国コードを出力します
于 2013-01-29T08:43:31.837 に答える