현재 저는 결합된 파일에 내용을 추가하기 위해 여러 줄을 사용합니다.
./myprogram 1.txt > Out.txt # Overwrite for the 1st file
./myprogram 2.txt >> Out.txt
./myprogram 3.txt >> Out.txt
./myprogram 4.txt >> Out.txt
한 줄로 대체할 수 있나요?
답변1
(./myprogram 1.txt; ./myprogram 2.txt; ./myprogram 3.txt; ./myprogram 4.txt) > out.txt
답변2
이는 수행하려는 작업과 프로그램이 입력 매개변수를 처리하는 방법에 따라 다릅니다.
/path/to/myprogram.sh
하지만 다음과 같은 사람이 있다고 가정해 보겠습니다 .
#!/bin/bash
echo "Processing file ${1?missing input file}"
다음을 수행할 수 있습니다.
find /path/to/inputfiles -name "*.txt" -exec /path/to/myprogram.sh {} \; > Out.txt
또는 bash(또는 Bourne과 유사한 쉘)에서:
for i in *.txt; do /path/to/myprogram.sh "$i"; done > Out.txt
(예제에서 4개의 파일 대신 1000개의 입력 파일이 있으면 훨씬 더 편리하기 때문에 for 루프나 find를 사용하고 있습니다.)
답변3
Per의 답변과 매우 유사하지만 원래 레이아웃을 유지합니다.
{
./myprogram 1.txt
./myprogram 2.txt
./myprogram 3.txt
./myprogram 4.txt
} > Out.txt
http://www.gnu.org/software/bash/manual/bashref.html#Command-Grouping
답변4
나는 이 솔루션이 더 우아하다고 생각했습니다.
FILE=/tmp/file.log
exec >> $FILE
./myprogram 1.txt
./myprogram 2.txt
./myprogram 3.txt
./myprogram 4.txt
exec 1<&2
echo 'Normal output has returned!'