次の3940のシーケンスを含むファイルがあります。
>TCONS_00000066 gene=XLOC_000030
CCGCCGGCTGCTGCGCGCACCGACTTGTCACCACCCCAGCACGTCCTCCACGTATACAAG
CGCTACGGTCCACCGCGGCAGCGTCGACGTCCTTGTCCGCAAACATGGTGGTGGCAGCTT
CCTCATCGAGCAGCAGCAACTCATCCTCGAGGGGAAGGGCCCAGAGCTTCTAATCCTACA
CGGCAACAACACTTTATACTTGTGTATAATTTCTCTTCGTTTCTGAGTTCATGGCTATCT
TTGTCTCTCTTATCTTCTCCCTTTTGCTATCTCTATATTTGTGATTGCCATGGAAATACA
>TCONS_00006042 gene=XLOC_003448
GCCACTAGCCAGCCCAGCCAGGGGAAGGGGAGGAGCTGCAAGCCCAACCCCCTGCTCAAC
CCTAAATTGCTTCCGCCGATCGGTGAGAGCTCCGATGCCTTCTTCTTCTTCTTCTTCCTC
CCCCTCTACCTGTTCCTTCTCCGAGATAACTGCAACATTTTCAGCACTTTTTCTGGCCAT
TCTCAAGTCCCCAGCCCAGGGACTAGAGTGTTACTATGGCTAGAGCAAATGAGATGGTCA
GGGCAGACTCAAGGATGATGGTTGTCTTTAGTGCCCTGGCATCTAAATCAGGGCCACTGA
CATTTGAAGACTCGCTCAGATTTGTCAAGAAAGTGAAGGCTTGTAACTACATGTTGTATT
200文字を超える他のファイルのシーケンスが必要です。
答え1
sed、awk、または grep を使用できます。
awk 'length($0)>200' file > newfile
または
grep '^.\{201\}' file > newfile
答え2
awk
まず、>
レコード区切り記号を設定する必要があります。
awk 'BEGIN{RS=">";ORS=""}length($0)>200{print ">"$0}' input > output
別のオプションpcregrep
:
pcregrep -M '^>[^>]{201,}' input > output
または、タイトルの文字ではなくDNA配列のみを計算してください。
pcregrep -M '^>[^>]*\n[^>]{201,}' input > output
答え3
Python( split.py
):
import sys
# call with the file as parameter
base = 0
line = ''
with open(sys.argv[-1]) as fp:
with open('shorter', 'w') as fps:
with open('longer', 'w') as fpl:
for x in fp:
if line and x.startswith('>'):
print len(line), base
if (len(line) - base) >= 200:
fpl.write(line)
else:
fps.write(line)
line = x
base = len(x) # lenght of the ">..." line
continue
if x.startswith('>'): # very first one
base = len(x)
line += x
if line:
if len(line) >= 200:
fpl.write(line)
else:
fps.write(line)
line = ""
python split.py inputfile
thenで呼び出すmv shorter inputfile
(ファイルが正常であることを確認した後)
答え4
cat file | while read -r line; do
if [ ${#line} -gt 200 ]; then
echo "${line}"
fi
done
編集の質問が更新されました。行の長さは必要ありませんが、行セットの長さが必要です。
以下のスクリプトでは> TCONSをエコーします。それ以外の場合、スクリプトは最後のクリックをスキップします。
multiline=""
(cat input; echo ">TCONS string for last token") | while read line; do
if [[ "$(echo "${line}"| cut -c1-6)" = ">TCONS" ]]; then
if [ ${#multiline} -gt 200 ]; then
echo "${multiline}"
fi
multiline=""
else
multiline="${multiline}${line}"
fi
done