2017-11-10 14 views
1

온라인으로 검색했지만 내 질문에 대답 할 수있는 것을 찾지 못했습니다.Linux 명령 줄에서 단일 입력으로 더 많은 입력을 지정하는 방법은 무엇입니까?

저는 우분투 리눅스에서 자바 도구를 사용하여 bash 명령으로 호출하고 있습니다.

java -Xmx8G -jar picard.jar FastqToSam \ 
FASTQ=6484_snippet_1.fastq \ #first read file of pair 
FASTQ2=6484_snippet_2.fastq \ #second read file of pair 
[...] 

내가 뭘하고 싶은 것은, 하나의 FASTQ의 경로를 지정하는 두 개의 서로 다른 파일의 경로를 지정하는 대신, 예를 들어 있습니다 :이 도구는 두 개의 서로 다른 입력 파일에 대한 두 가지 경로가 있습니다.

그래서 그 대신 cat file1 file2 > File을 갖는 FASTQ의 입력으로 File을 사용하여, 나는이 작업이 즉시 실행되는 것을 원하는 파일 시스템에 저장하지 않고, 즉석에서 File을 생성 (즉, 어떻게 될지 명령이 cat file1 file2 > File 인 경우).

나는 내 질문에 대한 설명을 분명히하기를 바랍니다. 다만 저에게 물어보십시오. 나는 더 잘 설명하려고 노력할 것입니다.

+0

기본적으로 두 개의'.fastq' 파일의 내용으로 인수를 전달하고 싶습니까? – Inian

+0

아무 것도 이해하지 못했습니다 ... – m0skit0

+0

가능한 한 가장 명확하게하기 위해'FASTQ'에 2 개의 입력 파일을 지정하고 'FASTQ2'에 2 개의 입력 파일을 지정하고 싶다고합시다. 자바 도구는 일반적으로 입력 2 파일 경로에서 가져 오지만 각 파일 경로에 대해 2 개의 파일을 지정하고 싶습니다 (이 경우 총 4 개의 파일을 지워야 함). – Vzzarr

답변

4

파일 이름 인수를 허용하는 잘 작성된 쉘 명령은 일반적으로 파일 이름 인수 목록을 허용합니다. 등 cat file 또는 cat file1 file2

이를 지원하지 않는 사용하려고하는, 쉽게 고정 할 수없는 프로그램이 아마도 당신의 OS 또는 쉘 의사 파일로 사용할 수 /dev/stdin 만드는 경우처럼.

cat file1 file2 | java -mumble -crash -burn FASTQ=/dev/stdin 

일부 쉘은 (일반적으로) 공정 대체 표준 출력에 생산 무엇이든 들어있는 하나의 파일처럼 호출 프로그램에 보면 공정 대체를 보유하고 있습니다.

java -mumble -crash -burn FASTQ=<(cat file1 file2) FASTQ2=<(cat file3 file4) 

하면 이러한 작업, 임시 파일을 사용하고 삭제를 당신이 일을 끝낼 때 믿을만한 솔루션입니다 간단한 쉘 스크립트의도.

#!/bin/sh 
: ${4?Need four file name arguments, will process them pairwise} 
t=$(mktemp -d -t fastqtwoness.XXXXXXX) || exit 
trap 'rm -rf $t' EXIT HUP INT TERM # remove in case of failure or when done 
cat "$1" "$2" >$t/1.fastq 
cat "$3" "$4" >$t/2.fastq 
exec java -mumble -crash -burn FASTQ=$t/1.fastq FASTQ2=$t/2.fastq 
+2

'cat'은 * single * 파일에서 사용할 때 [쓸모 없어요] (http://www.iki.fi/era/unix/award.html)입니다. 매우 * 목적은 여러 파일을 서로 연결하는 것입니다. 단일 파일 예제는 실제로 쓸모가 없지만 일반적인 디자인 패턴을 보여줍니다 ...하지만 설교 기회를 주셔서 감사합니다 (- : – tripleee

+0

이 [명령] (https://pastebin.com/Zef7uhgU)을 시도했지만 받았지만 이 예외 (https://pastebin.com/Bb80d1Pb). 아마도 당신이 제안한 명령이 작동 할 것이고,이 문제는이 특별한'.jar'에 있습니다.하지만 나는'File' 'cat file1 file2> File'에서 생성 된 명령이 문제없이 실행되었습니다. PS java 도구는 .gz 파일을 받아들입니다. [here] (https://stackoverflow.com/questions/8005114/fast-concatenation-of-multiple-gzip- 파일) 고양이 2 .gz 파일을 말할 수있다 (또는 그것은 다른 경우입니까?) PPS 죄송합니다. 삭제를 위해 죄송 합니다만,이 코멘트에 대해 계속 작업하고 있습니다. – Vzzarr

+0

실제로 링크해야하는 질문이 작동해야합니다. 내 게시하기 전에 로컬로 (지금 삭제 d) 의견을 말하지만 내 실험이 어떻게 든 잘못되었다고 생각합니다. 지금은 직접 재현 할 수 없기 때문입니다. 그러나'gzip'은''파일이없는''파일 '을 여는 것에 신경을 씁니다.gz' 접미어를 사용하는 것이 좋습니다. 커맨드 라인에서,'gzip -d tripleee