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