sed 일치 항목을 단일 파일로 리디렉션

sed 일치 항목을 단일 파일로 리디렉션

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

관련 정보