sed如何合并一些单词?

时间:2018-04-18 03:43:57

标签: awk sed

我的文件中填充了'/*'个字符,每行都有:

A / n B / v C / n D / n E / w F / v G / v H / v ......

A,B ...... H是单词。我想合并继续相同的'/ *'字符,比如说:

A / n B / v CD / n E / w FGH / v ......

我是sedawk订单的新手,我该怎么办? THX。

2 个答案:

答案 0 :(得分:3)

试试这个

sed -e ":a" -e "s#\(/.\) *\([^/]*\)\1#\2\1#g;ta"

的解释:

定义标签

:a

更改此模式

  • 由char组成的组(1)
  • 一些空间
  • 非/
  • 的char组(2)
  • 同组第1组

  • 第2组,然后是第1组

    s#(/。)([^ /] )\ 1#\ 2 \ 1#g

如果发生变化,请转到标签

t a

答案 1 :(得分:1)

或者,这是一个快速的AWK解决方案:

awk '{ out=""; cw=""; ct=""; for(i=1;i<=NF;i++) { split($i,a,"/"); if(a[2]==ct) cw = cw a[1]; else { if (cw||ct) out = (out ? out OFS : "") cw "/" ct; cw=a[1]; ct = a[2]; }; }; if(cw) out = (out ? out OFS : "") cw "/" ct; print out; }'

显然,它并不像@ NeronLeVelu的sed魔法那样优雅,但对于大输入可能会更快。

示例输入:

A/noun B/verb C/noun D/noun E/adj F/verb G/verb H/verb

示例输出:

A/noun B/verb CD/noun E/adj FGH/verb