2011-09-02 66 views
2

我有一个大的文件和行模式如下:小数模式匹配

MDQ[11:15],IO,MDQ[10:14],,,,MDQ[12:16],TPR_AAWD[11:15] 

我要修改这个文件类似如下:

MDQ[11],IO,MDQ[10],,,,MDQ[12],TPR_AAWD[11] 
MDQ[12],IO,MDQ[11],,,,MDQ[13],TPR_AAWD[12] 
MDQ[13],IO,MDQ[12],,,,MDQ[14],TPR_AAWD[13] 
MDQ[14],IO,MDQ[13],,,,MDQ[15],TPR_AAWD[14] 

我如何在SED实现这个/ awk的/的Perl/CSH/VIM? 请帮助

+1

这似乎是五个问题。 –

+1

您的意思是说,您想要根据'[]'内的范围将1行扩展为4个新行吗? – TLP

回答

2
awk -F '[][]' '{ 
    split($2, a, /:/) 
    split($4, b, /:/) 
    split($6, c, /:/) 
    split($8, d, /:/) 
    for (i=0; i < a[2]-a[1]; i++) { 
     printf("%s[%d]%s[%d]%s[%d]%s[%d]\n", 
      $1, a[1]+i, 
      $3, b[1]+i, 
      $5, c[1]+i, 
      $7, d[1]+i) 
    } 
}' 
+0

感谢您的快速回答...它工作正常.... – joshy

+0

嗨格兰杰克曼,你能解释'[] []'(字段分隔符)在脚本的第一行的含义? – joshy

+0

在awk中,字段分隔符可以是一个正则表达式。我想用'['或']'作为字段分隔符,所以我想把它们放到一个字符列表中('[...]')。如果要将右括号放入字符列表中,它必须是第一个字符,因此您可以得到'[] []',表示“开放字符列表,右括号字符,左括号字符,关闭字符列表”。 –

0

希望下面的这些帮助:

sed -e 's/:[0-9]*//g'