다음과 같은 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
파이썬( 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