2011-09-02 63 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'