我是bash脚本的新手。我想分割以下字符串,
chr14:81370042-81371098(+)
进入
chr14 81370042 81371098 +
或
chr14:81370042-81371098(-)
进入
chr14 81370042 81371098 -
[请告诉我如何使用在两种情况下都可以使用的命令来做到这一点。
我尝试过,cat a.tsv | tr -s ':' '\t' | sed "s/\t[0-9]+.*[0-9]+/[0-9]+\t[0-9]/g"
,它不起作用。
谢谢。
此sed
可能起作用:
sed -E 's/[^-+_[:alnum:]]+/ /g; s/ +$//; s/-(.)/ \1/g' <<< 'chr14:81370042-81371098(+)'
chr14 81370042 81371098 +
否则:
sed -E 's/[^-+_[:alnum:]]+/ /g; s/ +$//; s/-(.)/ \1/g' <<< 'chr14:81370042-81371098(-)'
chr14 81370042 81371098 -
[[^-+_[:alnum:]]+
匹配1个或多个不是-
,+
,_
和字母数字的字符。
$ sed 's/[():]/ /g; s/-/ /' file
chr14 81370042 81371098 +
chr14 81370042 81371098 -
或者如果您不喜欢留下的结尾空白字符,则:
$ sed 's/[(:]/ /g; s/)//; s/-/ /' file
chr14 81370042 81371098 +
chr14 81370042 81371098 -
使用显示的示例进行了书面和测试,请尝试以下。
echo "chr14:81370042-81371098(+)" | awk '{gsub(/:|-|\(|\)/,OFS)} 1'
[第二解决方案:在awk
中使用字段分隔符。
echo "chr14:81370042-81371098(+)" |
awk -v FS=':|-|\(|\)' '{
$1=$1
sub(/ +$/,"")
}
1'