![특정 줄을 연결하고 결과를 새 파일로 출력합니다.](https://linux55.com/image/158402/%ED%8A%B9%EC%A0%95%20%EC%A4%84%EC%9D%84%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B3%A0%20%EA%B2%B0%EA%B3%BC%EB%A5%BC%20%EC%83%88%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음과 같은 텍스트 파일이 여러 개 있습니다.
파일 1:
>ID_000_FLNNKGHD_01376
-ATGAATACAGAGGAAAAAACACCGCTTGCATACAAT
>ID_000_MGCDKLCO_02388
ATGAAGGTGGAAAAAACACCGCTTGCATTT
>ID_000_OMAMOGKP_02746
--ATGTTGGTGGAAAAAACACCGCTTGCGGTA
파일 2:
>ID_000_KGHDAAD_06245
AAATACAGAGGAAAAAACACCGCTTGCATACAAT
>ID_000_KOAAFG_40481
CCCCAGGAAGGTGGAAAAAACACCGCTTGCAAA
>ID_000_GPAAAGVV_07764
--AAATTGGTGG---------ACACCGCTTTT--
등.
각 파일의 첫 번째와 두 번째 줄, 세 번째와 네 번째 줄 등을 연결하고 다음과 같이 각 결과에 대해 새 파일을 출력해야 합니다.
파일 1 출력:
>ID_000_FLNNKGHD_01376-ID_000_KGHDAAD_06245
-ATGAATACAGAGGAAAAAACACCGCTTGCATACAATAAATACAGAGGAAAAAACACCGCTTGCATACAAT
파일 2 출력:
>ID_000_MGCDKLCO_02388-ID_000_KOAAFG_40481
ATGAAGGTGGAAAAAACACCGCTTGCATTTCCCCAGGAAGGTGGAAAAAACACCGCTTGCAAA
파일 3 출력:
>ID_000_OMAMOGKP_02746-ID_000_GPAAAGVV_07764
--ATGTTGGTGGAAAAAACACCGCTTGCGGTA--AAATTGGTGG---------ACACCGCTTTT--
등.
*첫 번째 줄은 ">"로 시작하고 각 문자열 사이에 "-" 연결을 추가해야 합니다. 두 번째 줄은 그냥 합쳐집니다.
출력 이름은 file_1.fasta에서 file_n.fasta로 지정되어야 합니다.
감사해요!
답변1
한 가지 방법은 다음과 같습니다.
paste file1.fa file2.fa |
sed -E 's/\s+>/-/; s/\s+//g' |
awk -v c=0 '{ if(/^>/){c++} print > "file"c".pasted.fa"; }'
이를 설명하기 위해 각 명령의 출력을 살펴보겠습니다.
$ paste file1.fa file2.fa
>ID_000_FLNNKGHD_01376 >ID_000_KGHDAAD_06245
-ATGAATACAGAGGAAAAAACACCGCTTGCATACAAT AAATACAGAGGAAAAAACACCGCTTGCATACAAT
>ID_000_MGCDKLCO_02388 >ID_000_KOAAFG_40481
ATGAAGGTGGAAAAAACACCGCTTGCATTT CCCCAGGAAGGTGGAAAAAACACCGCTTGCAAA
>ID_000_OMAMOGKP_02746 >ID_000_GPAAAGVV_07764
--ATGTTGGTGGAAAAAACACCGCTTGCGGTA --AAATTGGTGG---------ACACCGCTTTT--
따라서 이것은 각 파일에서 서로 옆에 있는 모든 줄을 인쇄합니다. 파일 1의 라인 1과 파일 2의 라인 1, 파일 1의 라인 2와 파일 2의 라인 2 등입니다. 그러나 여기에는 >
제거해야 할 추가 공간과 추가 공간이 있습니다. sed
현재 진행 중인 작업은 다음과 같습니다 .
$ paste file1.fa file2.fa | sed -E 's/\s+>/-/; s/\s+//'
>ID_000_FLNNKGHD_01376-ID_000_KGHDAAD_06245
-ATGAATACAGAGGAAAAAACACCGCTTGCATACAATAAATACAGAGGAAAAAACACCGCTTGCATACAAT
>ID_000_MGCDKLCO_02388-ID_000_KOAAFG_40481
ATGAAGGTGGAAAAAACACCGCTTGCATTTCCCCAGGAAGGTGGAAAAAACACCGCTTGCAAA
>ID_000_OMAMOGKP_02746-ID_000_GPAAAGVV_07764
--ATGTTGGTGGAAAAAACACCGCTTGCGGTA--AAATTGGTGG---------ACACCGCTTTT--
마지막 단계로 awk
스크립트는 다음을 수행합니다.
awk -v c=0
:awk
변수를 시작하고c
로 설정합니다0
.if(/^>/){c++}
c
: 로 시작하는 줄이 발견될 때마다 값을 1씩 증가시킵니다>
.print > "file"c".pasted.fa"
: 현재 행을 이름이 지정된 파일에 인쇄한file
다음 현재 값을 추가c
합니다.pasted.fa
.
예제 실행의 최종 결과는 다음과 같습니다.
$ ls *pasted*
file1.pasted.fa file2.pasted.fa file3.pasted.fa
$ cat file1.pasted.fa
>ID_000_FLNNKGHD_01376-ID_000_KGHDAAD_06245
-ATGAATACAGAGGAAAAAACACCGCTTGCATACAATAAATACAGAGGAAAAAACACCGCTTGCATACAAT
$ cat file2.pasted.fa
>ID_000_MGCDKLCO_02388-ID_000_KOAAFG_40481
ATGAAGGTGGAAAAAACACCGCTTGCATTTCCCCAGGAAGGTGGAAAAAACACCGCTTGCAAA
$ cat file3.pasted.fa
>ID_000_OMAMOGKP_02746-ID_000_GPAAAGVV_07764
--ATGTTGGTGGAAAAAACACCGCTTGCGGTA--AAATTGGTGG---------ACACCGCTTTT--