在Unix中使用AWK或SED在xml标记之间获取文本

时间:2012-07-13 13:12:51

标签: shell unix sed awk

  

可能重复:
  Delimited by comma using AWK or SED with the tags below

我的格式如下。

[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时放ZERO。)

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

任何人都可以建议如何获得这个。

1 个答案:

答案 0 :(得分: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
}

我希望这可以帮助您找到解决方案。