查找数字,并删除等于此数字的相邻字符

mmo*_*mot 5 unix perl awk sed

我的4列输出的一部分如下所示:

5    cc1kcc1kc    5    cc1kcc1kc
5    cc2ppggg   5    cc2ppggg
6    ccg12qqqqqqqqqqqqggg    10 ccccg11qqqqqqqqqqqggggg 
3    4qqqqcgc1q   12    cgccgccgccgc
Run Code Online (Sandbox Code Playgroud)

我只想改变第二和第四列,有没有办法用awk/sed删除旁边有字符的数字?或者使用perl脚本执行此转换会更容易/更好吗?

结果输出应如下所示:

5    ccccc    5    ccccc
5    ccggg    5    ccggg
6    ccgggg   10    ccccgggggg 
3    cgc    12    cgccgccgccgc
Run Code Online (Sandbox Code Playgroud)

Pau*_*ce. 4

从字面上理解这个问题,这会从字段 2 和 4 中删除字段中嵌入的任何 n个字符。

perl -lane 'for $i (1, 3) {@nums = $F[$i] =~ /(\d+)/g; for $num (@nums) {$F[$i] =~ s/$num.{$num}//}}; print join("\t", @F)'
Run Code Online (Sandbox Code Playgroud)

其他答案删除了数字,后面的所有字符都是相同的。

为了说明我的答案和其他答案之间的区别,请使用以下输入:

6    ccg8qqqqqqqqqqqqggg    10 ccccg3qqqqqqqqqqqggggg
Run Code Online (Sandbox Code Playgroud)

我的版本输出如下:

6    ccgqqqqggg     10      ccccgqqqqqqqqggggg
Run Code Online (Sandbox Code Playgroud)

而他们的输出是这样的:

6    ccgggg    10 ccccgggggg
Run Code Online (Sandbox Code Playgroud)