while 루프에서 출력 파일 이름 지정

while 루프에서 출력 파일 이름 지정

input.txt세 개의 열이 있는 파일이 있습니다.

A B Z
C D Y
E F X

처음 두 필드를 읽고, 일부 기능을 수행하고, 마지막 필드로 출력 이름을 지정하고 싶습니다.

while IFS=" " read -r f1 f2 f3; do cat $f1 $f2 > $f3; done < file.txt

긴 코드에 어떻게 적용할 수 있나요?

다음 input.sample.text과 같은 세 개의 열이 있습니다

../Data/G20P1sc-C05-R1.fastq.gz ../Data/G20P1sc-C05-R1.fastq.gz G20P1sc-C05
../Data/G20P1sc-C08-R1.fastq.gz ../Data/G20P1sc-C08-R1.fastq.gz G20P1sc-C08
 while IFS=" " read -r f1 f2 f3; do rsem-calculate-expression --star --star-path /share/pkg/star/2.7.0e/bin --temporary-folder --star-gzipped-read-file --paired-end $f1 $f2 ../genome_indices/rsem-star/rsem-star ../test_results/$f3; done < src_pdm3012/input.sample.text 

출력에 다음과 같은 오류가 있습니다.

EXITING: FATAL INPUT ERROR: empty value for parameter "outFileNamePrefix" in input "Command-Line-Initial"
SOLUTION: use non-empty value for this parameter

명시적으로 사용하려고 하는데 --outFileNamePrefix여전히 같은 오류가 발생합니다.

while IFS=" " read -r f1 f2 f3; do rsem-calculate-expression --star --star-path /share/pkg/star/2.7.0e/bin --temporary-folder --star-gzipped-read-file --paired-end $f1 $f2 ../genome_indices/rsem-star/rsem-star --outFileNamePrefix $f3; done < ../src_pdm3012/input.sample.text

답변1

awk이 작업을 수행하는 스크립트를 제안합니다 .

awk '{ print $1,$2 > $3}'

물론 이 항목이 $3존재하는지(고유한지) 확인하고 세 번째 열이 무엇인지 혼동이 없는지 확인해야 합니다. 즉, 열 1, 2, 3에는 필드 구분 기호가 포함되어서는 안 됩니다.

awk또한 처음 두 열에 대한 여러 가지 조작을 허용합니다.

답변2

while 루프인지 여부에 관계없이 두 개 이상의 명령의 출력을 리디렉션하기 위해 명령 그룹이나 모든 형태의 복합 명령을 리디렉션할 수 있습니다.

while IFS=" " read -r f1 f2 f3; do
  {
    cat < "$f1"
    echo whatever
    cat < "$f2"
    echo end
  } > "$f3"
done < file.txt

또한 POSIX 셸에서는 변수 확장을 인용해야 한다는 점을 기억하세요.

관련 정보