텍스트 파일에서 줄을 찾아 다른 파일의 출력으로 바꿉니다.

텍스트 파일에서 줄을 찾아 다른 파일의 출력으로 바꿉니다.

A, B 두 개의 파일이 있습니다.

File A
>Node1                  
...
>Node2
...

File B
>gb|KY551314.1| Influenza A virus (A/mallard/Idaho/AH0011522/2015(H7N7)) segment 
2 polymerase PB1 (PB1) and PB1-F2 protein (PB1-F2) genes, 
complete cds
Length=2316

>gb|KY561069.1| Influenza A virus (A/American green-winged teal/Missouri/15OS6591/2015(H11N9)) 
segment 1 polymerase PB2 (PB2) gene, complete 
cds
Length=2341

파일 A의 각 NodeX 줄을 파일 B의 후속 항목으로 바꾸는 방법은 무엇입니까? 결과는 다음과 같습니다.

File A
>gb|KY551314.1| Influenza A virus (A/mallard/Idaho/AH0011522/2015(H7N7)) segment 2 polymerase PB1 (PB1) and PB1-F2 protein (PB1-F2) genes, complete ads Length=2316
...

>gb|KY561069.1| Influenza A virus (A/American green-winged teal/Missouri/15OS6591/2015(H11N9)) segment 1 polymerase PB2 (PB2) gene, complete ads Length=2341
...

답변1

한 가지 방법은 다음과 같습니다 awk.

awk 'NR==FNR && /^>Node/ {
    $0 = ""
    for(i=0; i<=4; i++) {
        getline s <ARGV[2]
        $0 = $0 s
    }
}
NR==FNR' FileA FileB

답변2

perl -lMautodie -pe 'BEGIN{ open FILE_B, "<", pop; }
   s/^>Node.*// && do{for my $k (0..3) { s/$/<FILE_B> =~ s|\n| |r/e }}
' FileA FileB

설명하다

  • Perl 옵션: -l=> IFS=OFS=\n, -p=> 루프에서 암시적 파일을 읽고 자동으로 레코드를 인쇄합니다.
  • autodie오류를 수정하려면 pragma를 포함하세요.
  • 파일 B 열기
  • FileA의 시작 부분에서 >Node와 일치하는 줄의 경우 FileB를 4번 읽고 줄 바꿈을 제거합니다.

관련 정보