【问题标题】:decimal pattern matching十进制模式匹配
【发布时间】:2011-11-09 03:41:04
【问题描述】:

我有一个大文件,下面给出了线条模式:

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 行扩展为 4 行新行?

标签: regex perl vim sed awk


【解决方案1】:
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)
    }
}'

【讨论】:

  • 嗨 glenn jackman,你能解释一下脚本第一行中'[][]'(字段分隔符)的含义吗?
  • 在awk中,字段分隔符可以是正则表达式。我想使用[] 作为字段分隔符,所以我想将它们放入字符列表([...])中。如果要将右括号放入字符列表,它必须是第一个字符,所以你得到[][],意思是“打开字符列表,右括号字符,左括号字符,关闭字符列表”。
【解决方案2】:

希望以下内容有所帮助:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多