DNA 서열 이름 목록이 포함된 파일과 DNA 서열 목록이 포함된 파일이 있습니다. 그것들은 다음과 같습니다:
$ cat list.txt
seq1
seq3
$ cat sequences.txt
>seq1
AAAAA
AAAAA
>seq2
CCCCC
CCCCC
CCCCC
>seq3
TTTTT
나는 seq1과 seq2(list.txt에 나열됨)를 검색하여 단일 파일로 리디렉션하고 싶습니다. 보시다시피, 각 시퀀스에는 줄 수가 다르기 때문에 "sed"가 각 일치 후에 N 줄을 선택한다고 말할 수는 없습니다. 내 출력이 다음과 같기를 원합니다.
$ ls
seq1.txt
seq2.txt
$ cat seq1.txt
>seq1
AAAAA
AAAAA
$ cat seq2.txt
>seq3
TTTTT
나는 이것을 사용하고 있습니다 :
while read list
do
names=$(echo $list)
sed '/$list/,/>/{/>/q}' "$PWD/sequences.txt" > "$names".dna
done < list.txt
그러나 출력은 다음과 같습니다.
$ ls
seq1.txt
seq2.txt
$ cat seq1.txt
>seq1
AAAAA
AAAAA
>seq3
TTTTT
$ cat seq2.txt
>seq1
AAAAA
AAAAA
>seq3
TTTTT
스크립트는 별도의 파일을 생성하지만 모든 파일에는 필요한 단일 파일이 아닌 모든 일치 항목이 포함되어 있습니다.
미리 감사드립니다.
답변1
이 작업은 sed만으로는 수행할 수 없습니다. 그러나 awk를 사용하는 경우:
awk '
# remember the wanted sequences
NR == FNR {seqs[$1]; next}
$1 ~ /^>/ {
# get the sequence name
seq = $1
sub(/^>/, "", seq)
p = 0
# if it is in the list, set up the file to print to
if (seq in seqs) {
f = seq ".txt"
p = 1
}
}
p {print > f}
' list.txt sequences.txt
답변2
command
awk '$1 ~ /seq1/{f=1}$1~/seq2/{f=0;exit}f' sequences.txt >seq1.txt
sed -n '/seq3/,$p' sequences.txt > seq2.txt
산출
cat seq1.txt
seq1
AAAAA
AAAAA
cat seq2.txt
seq3
TTTTT