-1

重複の可能性:
以下のタグで AWK または SED を使用してコンマで区切られている

以下の形式のテキストがあります。

[AccountID]
 [CallerID]
  [BilledAccountAttributes]
  1111111
  1111111
  1111111
[\BilledAccountAttributes]
[OBIOTax]
10
20
30
[\OBIOTax]
[RINOTax]
777
888
999
[\RINOTax]
[\CallerID]
[\AccountID]

[AccountID]
[CallerID]
[BilledAccountAttributes]
2222222
2222222
2222222
[\BilledAccountAttributes]
[OBIOTax]
40
50
60
[\OBIOTax]
[\CallerID]
[\AccountID]

そして、以下の形式で出力したい(RINOTAXが表示されていない場合は、カンマで区切り、ゼロを入れてください。)

1111111,1111111,1111111,  10,20,30,  777,888,999  
2222222,2222222,2222222,  40,50,60,    0,  0,  0  

誰でもこれを取得する方法を提案できますか。

4

1 に答える 1

0

そのために awk を使用します。

私のアプローチは、行に数字のみが含まれているかどうかを確認することです。これは正規表現で行うことができます。awk のドキュメントには、awk でこれを使用する方法が記載されています。

行に が含まれている場合は[\AccountID]、改行を出力します。

マーカー変数を使用して、現在の行に以前の値が印刷されていたかどうかを記憶します。値が出力された場合は、このマーカーを true に設定します。次に、このマーカーに応じてコンマを出力します。改行を書く場合 (上記参照)、マーカーを false に設定します。そのため、次の番号の前にカンマは出力されません。

いくつかの疑似コード (シェルのような構文):

begin { marker = 0; }
{
  if 'line contains number' then
    if 'marker == 1' then print ','
    print current line
    set marker to 1
  elsif 'line is end account id' then
    set marker to 0
    print '\n'
  fi
}

これが解決策を見つけるのに役立つことを願っています。

于 2012-07-13T13:24:25.903 に答える