0

以下に示す入力ファイルが1つあります。

Values,series,setupresultcode,nameofresultcode,resultcode
2,9184200,,serviceSetupResultempty,2001
11,9184200,0,successfulReleasedByService,2001
194,9184200,1,successfulDisconnectedByCallingParty,2001
101,9184200,2,successfulDisconnectByCalledParty,2001
2,9184201,0,successfulReleasedByService,2001
78,9184201,1,successfulDisconnectedByCallingParty,2001
32,9184201,2,successfulDisconnectByCalledParty,2001
4,9184202,0,successfulReleasedByService,2001
63,9184202,1,successfulDisconnectedByCallingParty,2001
37,9184202,2,successfulDisconnectByCalledParty,2001

以下のように出力したい:

Series,successfulReleasedByService,successfulDisconnectedByCallingParty,successfulDisconnectByCalledParty,serviceSetupResultempty
9184200,11,194,101,2
9184202,4,63,37,

入力ファイルの 3 番目 (整数) または 4 番目 (文字列) の列。

たとえば、データの 2 番目の列には n 個の系列があります。このシリーズには 4 つの setupresultcode (空、0、1、2) があります。各結果コードの名前は 4 列目に示されます。resultcode が 0 の場合に出力したい。つまり、successfulReleasedByService は、シリーズ 9184200 に対して値 11 を出力します。

4

1 に答える 1

1

私はテストしていませんが、このようなものが動作する可能性があります。ある種の疑似コードと見なしてください。

#!/bin/awk -f
BEGIN
{
  number_of_series=0;
}
{
  #This part will be executed for every line
  if ($3 =="0" || $3 == "1" || $3 == "2")
  {
    for (i=1; i<=number_of_series; i++)
    {
      #If the series has already been added
      if(seriesarray[i] == $2)
      {
        #Concat the results
        seriesarray[$2]=seriesarray[$2]","$1;
      }
      #If it's a new series
      else
      {
        number_of_series++;
        seriesarray[$2]=$1;
      }
    }
  }
}
END
{
  #Iterate over the series and print the series id and the concatenated results
  for (series in seriesarray)
  {
    print series, seriesarray[series];
  }
}

これにより、次のような結果が得られます

9184200,11,194,101

9184201,2,78,32

9184202,4,63,37

于 2012-01-11T13:42:26.353 に答える