sed 命令和格式化一行

sed 命令和格式化一行

我需要转动这些标题:

'>>tr|G1PEZ0|G1PEZ0_MYOLU Uncharacterized protein (Fragment) OS=Myotis lucifugus GN=SNCG PE=4 SV=1

就这样:

'>G1PEZ0_MYOLU 

请忽略开头的撇号。

答案1

这个怎么样:

str='>>tr|G1PEZ0|G1PEZ0_MYOLU Uncharacterized protein (Fragment) OS=Myotis lucifugus GN=SNCG PE=4 SV=1'
echo "$str" | sed -e 's/ .*//' -e 's/.*|//' -e 's/^/>/'

它使用 3 个单独的替换 - 删除从该行第一个空格开始的所有内容,删除|该行到最后一个空格的所有内容,然后将>back 作为该行的第一个字符。

答案2

这也可以使用以下方法完成cut

input=">>tr|G1PEZ0|G1PEZ0_MYOLU Uncharacterized protein (Fragment) OS=Myotis lucifugus GN=SNCG PE=4 SV=1"
echo "$input" | cut -d" " -f1 | cut -d"|" -f3 | sed "s/^/>/"

答案3

trcut

tr ' |' '>>' <input |cut -d\> -f1,6

...tr将所有空间和|管道转换为>直角,然后从所得的有限cut域中仅取出第 1 个和第 6 个域。> -d-f

用 sed...

sed -n 'y/ /\n/;s/.*|/>/;P' <input

它还将y///所有空格转换为\newline,然后s///将最左边和最长的以管道结尾的字符串替换|为单个字符串>,然后P仅打印到\n模式空间中的第一个 ewline。

相关内容