我有一个如下所示的文件:
chr22 43089055 43089055 - NM_017436 C 300 903delC
chr22 43089715-43089717 43089715-43089717 - NM_017436 CTT 79
我想删除-
第 3 列之前的所有字符,得到如下所示的输出:
chr22 43089055 43089055 - NM_017436 C 300 903delC
chr22 43089715-43089717 43089717 - NM_017436 CTT 79
我awk '{$2+=0}1' file
过去曾使用过删除 后的字符-
,但我不相信我可以使用相同的技术来解决当前的问题。有什么建议么?
答案1
Perl 来拯救:
perl -lane 'BEGIN { $, = "\t" } $F[2] =~ s/.*-//; print @F' < file
-l
将换行符附加到print
-n
逐行读取输入-a
按空格分割每一行并填充@F
数组$,
打印时分隔列表成员,设置为制表符s/.*-//
将破折号之前的所有内容替换为空,它绑定到第三列(数组从 0 开始索引)
答案2
作为一些不同的变体
awk
awk '{$3=A[split($3,A,"-")]}1' file
sed
sed -r 's/((\S+\s+){2})[^- ]+-/\1/' file
答案3
使用awk
:
< input awk 'BEGIN {FS=OFS=" "} {gsub(/[^-]*-/, "", $3); print}'