我有一个示例文本文件,其中包含以下列
scff2 54 92 aa_bb_c4_1024_0_2 scff2 30 18 aa_bb_c4_1024_0_2
scff8 80 96 aa_bb_c4_24_0_2 scff8 14 42 aa_bb_c4_24_0_2
scff1 20 25 aa_bb_c4_98_0_1 scff4 11 25 aa_bb_c4_13_0_1
scff6 16 61 aa_bb_c4_84_0_1 scff6 15 16 aa_bb_c4_84_0_2
我想删除第4列和第8列中的最后一个字符,如下所示,使用awk
scff2 54 92 aa_bb_c4_1024_0 scff2 30 18 aa_bb_c4_1024_0
scff8 80 96 aa_bb_c4_24_0 scff8 14 42 aa_bb_c4_24_0
scff1 20 25 aa_bb_c4_98_0 scff4 11 25 aa_bb_c4_13_0
scff6 16 61 aa_bb_c4_84_0 scff6 15 16 aa_bb_c4_84_0
我尝试使用以下脚本sed -i.bak 's/_[0-9]*$//' sample.txt
,但它确实删除了第8列中最后一个下划线后的字符,但没有删除第4列中的字符。有人可以指导我实现我想要的输出。提前谢谢。
答案 0 :(得分:3)
您可以使用sub()
中的awk
在特定字段中执行替换。
awk '{sub(/_[0-9]*$/, "", $4); sub(/_[0-9]*$/, "", $8); print}' sample.txt
答案 1 :(得分:3)
看起来你只需要:
$ sed 's/_[0-9]\( \|$\)/\1/g' file
scff2 54 92 aa_bb_c4_1024_0 scff2 30 18 aa_bb_c4_1024_0
scff8 80 96 aa_bb_c4_24_0 scff8 14 42 aa_bb_c4_24_0
scff1 20 25 aa_bb_c4_98_0 scff4 11 25 aa_bb_c4_13_0
scff6 16 61 aa_bb_c4_84_0 scff6 15 16 aa_bb_c4_84_0
或者如果您的sed支持-E
来启用ERE(我希望您使用-i
后会这样做):
$ sed -E 's/_[0-9]( |$)/\1/g' file
scff2 54 92 aa_bb_c4_1024_0 scff2 30 18 aa_bb_c4_1024_0
scff8 80 96 aa_bb_c4_24_0 scff8 14 42 aa_bb_c4_24_0
scff1 20 25 aa_bb_c4_98_0 scff4 11 25 aa_bb_c4_13_0
scff6 16 61 aa_bb_c4_84_0 scff6 15 16 aa_bb_c4_84_0
或@GlennJackman在评论中指出,使用GNU sed(以上也适用于其他seds,例如OSX sed),它是:
sed 's/_[0-9]\>//g'
答案 2 :(得分:2)
有时在gawk中存储替换结果很有用:
$ awk '{$4=gensub(/_[0-9]$/, "", 1, $4); $8=gensub(/_[0-9]$/, "", 1, $8)}1' file
scff2 54 92 aa_bb_c4_1024_0 scff2 30 18 aa_bb_c4_1024_0
scff8 80 96 aa_bb_c4_24_0 scff8 14 42 aa_bb_c4_24_0
scff1 20 25 aa_bb_c4_98_0 scff4 11 25 aa_bb_c4_13_0
scff6 16 61 aa_bb_c4_84_0 scff6 15 16 aa_bb_c4_84_0
但@Barmar解决方案更聪明/更短/更轻
不是在所有awk
实施中:不是nawk
,需要GNU awk
或者mawks
答案 3 :(得分:0)
在GNU awk中,所有内容都以`_ [0-9] +'结尾删除:
$ awk '{gsub(/_[0-9]+\>/,"")}1' file
scff2 54 92 aa_bb_c4_1024_0 scff2 30 18 aa_bb_c4_1024_0
scff8 80 96 aa_bb_c4_24_0 scff8 14 42 aa_bb_c4_24_0
...
答案 4 :(得分:0)
awk '{gsub(/_0_./,"_0")}1' file
scff2 54 92 aa_bb_c4_1024_0 scff2 30 18 aa_bb_c4_1024_0
scff8 80 96 aa_bb_c4_24_0 scff8 14 42 aa_bb_c4_24_0
scff1 20 25 aa_bb_c4_98_0 scff4 11 25 aa_bb_c4_13_0
scff6 16 61 aa_bb_c4_84_0 scff6 15 16 aa_bb_c4_84_0