-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。因此,在下一个数字之前,不会打印逗号。

一些伪代码(类似于 shell 的语法):

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 回答