Мне нужно изменить этот шаблон
>UniRef90_Q57KY8 Total protein n=182 Tax=GammaproteobacteriaTaxID=1236 RepID=Q57KY8_SALCH
MKKQLIRTLTASILLMSTSVLAQEAPSRTECIAPAKPGGGFDLTYKLIQVSLLETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPGEPGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKTLKDLMTAMEKDPNSVVIGAGASI
GSQDWMKSALLAQKANVDPHKMRYVAFEGGGEPVTALMGNHVQVVSGDLSEMVPYLGGDKIRVLAVFSENRLPGQLANVP
TAKEQGYDLVWPIIRGFYVGPKVSDADYQWWVDTFKKLQQTDEFKKQRDLRGLFEFDMTGQQLDDYVKKQVTDYREQAKAFGLAK
>UniRef90_G8LKQ2 UPF5341 protein yflP n=80 Tax=Bacteria TaxID=2 RepID=G8LKQ2_ENTCL
MKKQLLSTLAASVLMISASVVQAQDAPSRTECIAPAKPGGGFDLTCKLIQVSMLETGAIAKPMRVTYMPGGVGAVAYNAI
VAQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLATVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGAS
IGSQDWMKAALLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLNGDKIRVLAVFSENRLPGQLANV
PTAKEQGYDLVWPIIRGFFVGPKVTDAEYQWWVETFNKLQQTEAFKKQRDLRGLFEFNLSGKPLDEYVKKQVNDYREQAKAFGLAK
>UniRef90_E3GB58 Uncharacterized protein n=1 Tax=Enterobacter lignolyticus (strain SCF1) TaxID=701347 RepID=E3GB58_ENTLS
MKKTLLQTVIATALLMSTAAFAVEAPGRTECIAPAKPGGGFDLTCKLIQVSLQETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGASI
GSQDWMKAAKLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLQGDKIRVLAVFAENRLPGQLANVP
TAKEQGYDLVWPIIRGFYLGPKVSDDEYNWWVETFQKLQQTDEFKKQRELRGLFEFNMNGKALDEYVKKQVTDYREQAKSFGLAK
На что-то вроде
>Q57KY8_Gammaproteobacteria
MKKQLIRTLTASILLMSTSVLAQEAPSRTECIAPAKPGGGFDLTYKLIQVSLLETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPGEPGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKTLKDLMTAMEKDPNSVVIGAGASI
GSQDWMKSALLAQKANVDPHKMRYVAFEGGGEPVTALMGNHVQVVSGDLSEMVPYLGGDKIRVLAVFSENRLPGQLANVP
TAKEQGYDLVWPIIRGFYVGPKVSDADYQWWVDTFKKLQQTDEFKKQRDLRGLFEFDMTGQQLDDYVKKQVTDYREQAKAFGLAK
>G8LKQ2_Bacteria
MKKQLLSTLAASVLMISASVVQAQDAPSRTECIAPAKPGGGFDLTCKLIQVSMLETGAIAKPMRVTYMPGGVGAVAYNAI
VAQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLATVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGAS
IGSQDWMKAALLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLNGDKIRVLAVFSENRLPGQLANV
PTAKEQGYDLVWPIIRGFFVGPKVTDAEYQWWVETFNKLQQTEAFKKQRDLRGLFEFNLSGKPLDEYVKKQVNDYREQAKAFGLAK
>E3GB58_Enterobacter lignolyticus (strain SCF1)
MKKTLLQTVIATALLMSTAAFAVEAPGRTECIAPAKPGGGFDLTCKLIQVSLQETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGASI
GSQDWMKAAKLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLQGDKIRVLAVFAENRLPGQLANVP
TAKEQGYDLVWPIIRGFYLGPKVSDDEYNWWVETFQKLQQTDEFKKQRELRGLFEFNMNGKALDEYVKKQVTDYREQAKSFGLAK
Итак, избавляясь от имени базы данных в начале, оставляя код впоследствии, следуя под знаком подчеркивания с названием налога.
Вы можете использовать:
$ sed -r '/^>/ s/^>[^_]+_([^ ]+) .* Tax=(.*)TaxID=.*/>\1_\2/' file
>Q57KY8_Gammaproteobacteria
MKKQLIRTLTASILLMSTSVLAQEAPSRTECIAPAKPGGGFDLTYKLIQVSLLETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPGEPGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKTLKDLMTAMEKDPNSVVIGAGASI
GSQDWMKSALLAQKANVDPHKMRYVAFEGGGEPVTALMGNHVQVVSGDLSEMVPYLGGDKIRVLAVFSENRLPGQLANVP
TAKEQGYDLVWPIIRGFYVGPKVSDADYQWWVDTFKKLQQTDEFKKQRDLRGLFEFDMTGQQLDDYVKKQVTDYREQAKAFGLAK
>G8LKQ2_Bacteria
MKKQLLSTLAASVLMISASVVQAQDAPSRTECIAPAKPGGGFDLTCKLIQVSMLETGAIAKPMRVTYMPGGVGAVAYNAI
VAQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLATVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGAS
IGSQDWMKAALLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLNGDKIRVLAVFSENRLPGQLANV
PTAKEQGYDLVWPIIRGFFVGPKVTDAEYQWWVETFNKLQQTEAFKKQRDLRGLFEFNLSGKPLDEYVKKQVNDYREQAKAFGLAK
>E3GB58_Enterobacter lignolyticus (strain SCF1)
MKKTLLQTVIATALLMSTAAFAVEAPGRTECIAPAKPGGGFDLTCKLIQVSLQETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGASI
GSQDWMKAAKLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLQGDKIRVLAVFAENRLPGQLANVP
TAKEQGYDLVWPIIRGFYLGPKVSDDEYNWWVETFQKLQQTDEFKKQRELRGLFEFNMNGKALDEYVKKQVTDYREQAKSFGLAK
Это зависит от первого фрагмента текста, который вы хотите быть первым фрагментом текста после первого подчеркивания (_). Там могут быть остатки пробелов, оставшиеся на выходе после названия налога - ваш файл, по-видимому, несовместим с тем, существует ли пространство перед TaxID, поэтому трудно сделать это чистым. Мы можем удалить их, если это важно, с дополнительной командой s до конца - s/(.*)\s+/\1, выполняя полную команду:
sed -r '/^>/ s/^>[^_]+_([^ ]+) .* Tax=(.*)TaxID=.*/>\1_\2/;s/(.*)\s+/\1/' file
Вы можете использовать:
$ sed -r '/^>/ s/^>[^_]+_([^ ]+) .* Tax=(.*)TaxID=.*/>\1_\2/' file
>Q57KY8_Gammaproteobacteria
MKKQLIRTLTASILLMSTSVLAQEAPSRTECIAPAKPGGGFDLTYKLIQVSLLETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPGEPGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKTLKDLMTAMEKDPNSVVIGAGASI
GSQDWMKSALLAQKANVDPHKMRYVAFEGGGEPVTALMGNHVQVVSGDLSEMVPYLGGDKIRVLAVFSENRLPGQLANVP
TAKEQGYDLVWPIIRGFYVGPKVSDADYQWWVDTFKKLQQTDEFKKQRDLRGLFEFDMTGQQLDDYVKKQVTDYREQAKAFGLAK
>G8LKQ2_Bacteria
MKKQLLSTLAASVLMISASVVQAQDAPSRTECIAPAKPGGGFDLTCKLIQVSMLETGAIAKPMRVTYMPGGVGAVAYNAI
VAQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLATVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGAS
IGSQDWMKAALLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLNGDKIRVLAVFSENRLPGQLANV
PTAKEQGYDLVWPIIRGFFVGPKVTDAEYQWWVETFNKLQQTEAFKKQRDLRGLFEFNLSGKPLDEYVKKQVNDYREQAKAFGLAK
>E3GB58_Enterobacter lignolyticus (strain SCF1)
MKKTLLQTVIATALLMSTAAFAVEAPGRTECIAPAKPGGGFDLTCKLIQVSLQETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGASI
GSQDWMKAAKLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLQGDKIRVLAVFAENRLPGQLANVP
TAKEQGYDLVWPIIRGFYLGPKVSDDEYNWWVETFQKLQQTDEFKKQRELRGLFEFNMNGKALDEYVKKQVTDYREQAKSFGLAK
Это зависит от первого фрагмента текста, который вы хотите быть первым фрагментом текста после первого подчеркивания (_). Там могут быть остатки пробелов, оставшиеся на выходе после названия налога - ваш файл, по-видимому, несовместим с тем, существует ли пространство перед TaxID, поэтому трудно сделать это чистым. Мы можем удалить их, если это важно, с дополнительной командой s до конца - s/(.*)\s+/\1, выполняя полную команду:
sed -r '/^>/ s/^>[^_]+_([^ ]+) .* Tax=(.*)TaxID=.*/>\1_\2/;s/(.*)\s+/\1/' file
Вы можете использовать:
$ sed -r '/^>/ s/^>[^_]+_([^ ]+) .* Tax=(.*)TaxID=.*/>\1_\2/' file
>Q57KY8_Gammaproteobacteria
MKKQLIRTLTASILLMSTSVLAQEAPSRTECIAPAKPGGGFDLTYKLIQVSLLETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPGEPGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKTLKDLMTAMEKDPNSVVIGAGASI
GSQDWMKSALLAQKANVDPHKMRYVAFEGGGEPVTALMGNHVQVVSGDLSEMVPYLGGDKIRVLAVFSENRLPGQLANVP
TAKEQGYDLVWPIIRGFYVGPKVSDADYQWWVDTFKKLQQTDEFKKQRDLRGLFEFDMTGQQLDDYVKKQVTDYREQAKAFGLAK
>G8LKQ2_Bacteria
MKKQLLSTLAASVLMISASVVQAQDAPSRTECIAPAKPGGGFDLTCKLIQVSMLETGAIAKPMRVTYMPGGVGAVAYNAI
VAQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLATVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGAS
IGSQDWMKAALLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLNGDKIRVLAVFSENRLPGQLANV
PTAKEQGYDLVWPIIRGFFVGPKVTDAEYQWWVETFNKLQQTEAFKKQRDLRGLFEFNLSGKPLDEYVKKQVNDYREQAKAFGLAK
>E3GB58_Enterobacter lignolyticus (strain SCF1)
MKKTLLQTVIATALLMSTAAFAVEAPGRTECIAPAKPGGGFDLTCKLIQVSLQETGAIEKPMRVTYMPGGVGAVAYNAIV
AQRPAEAGTVVAFSGGSLLNLSQGKFGRYGVDDVRWLASVGTDYGMIAVRADSPWKSLKDLLTAMEKDPNSVVIGAGASI
GSQDWMKAAKLAQQAKVDPHKMRYVAFEGGGEPVTALMGNHVQAVSGDLSEMVPYLQGDKIRVLAVFAENRLPGQLANVP
TAKEQGYDLVWPIIRGFYLGPKVSDDEYNWWVETFQKLQQTDEFKKQRELRGLFEFNMNGKALDEYVKKQVTDYREQAKSFGLAK
Это зависит от первого фрагмента текста, который вы хотите быть первым фрагментом текста после первого подчеркивания (_). Там могут быть остатки пробелов, оставшиеся на выходе после названия налога - ваш файл, по-видимому, несовместим с тем, существует ли пространство перед TaxID, поэтому трудно сделать это чистым. Мы можем удалить их, если это важно, с дополнительной командой s до конца - s/(.*)\s+/\1, выполняя полную команду:
sed -r '/^>/ s/^>[^_]+_([^ ]+) .* Tax=(.*)TaxID=.*/>\1_\2/;s/(.*)\s+/\1/' file
Вы можете использовать следующий однострочный perl:
perl -ne 'if($_=~/^>/){($id,$tax)=$_=~/UniRef90_(\S+).*Tax=(.*)TaxID/; print ">",$id,"_",$tax,"\n";}else{print $_;}' input.fa > output.fa
Это будет читаться с input.fa, изменить заголовки fasta и записать в output.fa
Объяснение команды:
perl -ne ' #call perl and read the file line-wise
if($_=~/^>/){ #check if the line is a header
($id,$tax)=$_=~/UniRef90_(\S+).*Tax=(.*)TaxID/; #extract the ID and the tax string
print ">",$id,"_",$tax,"\n";} #print the new header
else{ #print the sequence (not a header line)
print $_;}
' input.fa > output.fa
Вы можете использовать следующий однострочный perl:
perl -ne 'if($_=~/^>/){($id,$tax)=$_=~/UniRef90_(\S+).*Tax=(.*)TaxID/; print ">",$id,"_",$tax,"\n";}else{print $_;}' input.fa > output.fa
Это будет читаться с input.fa, изменить заголовки fasta и записать в output.fa
Объяснение команды:
perl -ne ' #call perl and read the file line-wise
if($_=~/^>/){ #check if the line is a header
($id,$tax)=$_=~/UniRef90_(\S+).*Tax=(.*)TaxID/; #extract the ID and the tax string
print ">",$id,"_",$tax,"\n";} #print the new header
else{ #print the sequence (not a header line)
print $_;}
' input.fa > output.fa
Вы можете использовать следующий однострочный perl:
perl -ne 'if($_=~/^>/){($id,$tax)=$_=~/UniRef90_(\S+).*Tax=(.*)TaxID/; print ">",$id,"_",$tax,"\n";}else{print $_;}' input.fa > output.fa
Это будет читаться с input.fa, изменить заголовки fasta и записать в output.fa
Объяснение команды:
perl -ne ' #call perl and read the file line-wise
if($_=~/^>/){ #check if the line is a header
($id,$tax)=$_=~/UniRef90_(\S+).*Tax=(.*)TaxID/; #extract the ID and the tax string
print ">",$id,"_",$tax,"\n";} #print the new header
else{ #print the sequence (not a header line)
print $_;}
' input.fa > output.fa