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 쉘에서는 변수 확장에 따옴표가 필요하다는 점을 기억하십시오.

관련 정보