我的文件中填充了'/*'
个字符,每行都有:
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 ......
我是sed
或awk
订单的新手,我该怎么办? THX。
答案 0 :(得分:3)
试试这个
sed -e ":a" -e "s#\(/.\) *\([^/]*\)\1#\2\1#g;ta"
的解释:
定义标签
:a
更改此模式
到
第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