我的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)
从字面上理解这个问题,这会从字段 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)