"cat" 출력을 자리 표시자로 저장

"cat" 출력을 자리 표시자로 저장

이라는 프로그램을 사용하고 있어요미니 지도읽기를 참조 게놈에 정렬하는 데 사용됩니다(계산 생물학 문제). 이 프로그램은 위치 인수로 두 개의 파일을 입력해야 합니다. 먼저 형식의 참조 .fasta와 형식의 읽기 결과 파일입니다 fastq.

문제는 fastq파일이 여러 개 있다는 것입니다. 한 가지 옵션은 cat *.fastq > cat_all.fastq먼저 호출을 사용하여 모두 연결하는 것 입니다 minimap. 하지만 저장 공간을 낭비하지 않도록 파일을 모두 연결하고 해당 파일을 minimap저장하지 않고 파이프로 연결하고 싶습니다 .cat_all.fastq

cat출력을 저장하지 않고 자리 표시자로 저장한 다음 minimap비슷한 것으로 파이프하는 방법이 있습니까 ?

cat *.fastq | minimap2 -ax map-ont /path/to/a/file.fasta {placeholder_for_the_cat_command} > output_file.sam

minimap다음은 단일(연결된) 파일을 호출하는 방법에 대한 예입니다 PD180425_cat_all.fastq.

minimap2 -ax map-ont /path/to/a/file.fasta PD180425_cat_all.fastq > PD180425_aligned_minimap.sam

답변1

예, bash셸에서 사용할 수 있습니다프로세스 교체:

minimap -ax map-ont /path/to/fasta.file <( cat *.fastq ) >output.sam

이는 <( ... )프로세스 대체입니다. /dev/fd/XXX읽을 때 명령 출력이 생성되는 명명된 파이프( 와 유사)의 경로 이름으로 대체됩니다 . 프로세스 대체 명령의 출력은 디스크에 저장되지 않습니다.

도구 minimap가 fastq 데이터에서 앞뒤로 이동할 필요가 없고 순차적으로 읽는 한 이는 작동할 수 있습니다.

sh프로세스 대체 없이 이 작업을 수행할 수 있습니다(이는 모든 POSIX 셸 에서도 작동합니다 ).

mkfifo fastq_data
cat *.fastq >fastq_data &
minimap -ax map-ont /path/to/fasta.file fastq_data >output.sam
rm fastq_data

이는 첫 번째 명령과 거의 동일한 작업을 수행합니다. 명명된 파이프를 생성하고 fastq 데이터를 여기에 연결합니다( cat모든 출력을 읽을 때까지 백그라운드 작업으로 실행된 minimap다음 종료됩니다). minimap그런 다음 명명된 파이프를 사용하여 도구를 호출하여 fastq 데이터를 가져옵니다. 완료되면 명명된 파이프가 삭제됩니다.

fastq_data파이프 에서 읽는 것은 cat임시 파일이 아닌 명령에서 직접 읽는 것을 의미합니다. 마찬가지로 결과는 cat디스크에 저장되지 않습니다.

minimap어떤 이유로 도구에 특정 파일 이름 접미사가 있는 fastq 파일이 필요한 경우 이것이 가장 좋은 옵션일 수 있습니다. 명명된 파이프 data.fastq또는 이와 유사한 이름을 지정하면 됩니다.

관련 정보