나는 일부 입력 파일을 처리하고 파일로 출력을 얻기 위해 간단한 for 루프를 사용하고 있습니다. 내가 사용하는 것은
for k in ../some_directory/*.txt;
do command (containing -i $k -o outputfile.txt);
done
이제 각 루프가 출력을 제공합니다. 출력을 파일에 기록하고 싶습니다. 이 루프는 이전 파일을 모두 대체하고 각 루프의 출력이 포함된 여러 개의 outputfile.txt 파일을 제공합니다. 파일에 명령을 추가하는 방법은 무엇입니까? 화면 출력이 아니라 각 명령의 출력을 원합니다.
답변1
원하는 결과를 얻는 데는 두 가지 옵션이 있습니다.
for k in /path/to/*.txt; do
some_command -i "$k" >> /path/to/output.txt
done
또는
for k in /path/to/*.txt; do
some_command -i "$k"
done >> /path/to/output.txt
프로그램이 표준 출력에 쓰지 않는 경우오직지정된 파일에 쓰려면 -o
다음을 수행할 수 있습니다.
for k in /path/to/*.txt; do
some_command -i "$k" -o /tmp/output.txt
cat /tmp/output.txt >> /path/to/real_output.txt
done
rm /tmp/output.txt
답변2
더 간단한 해결책을 생각했습니다. 입력과 출력과 동일한 파일 이름을 제공하면 됩니다. 모든 변경 사항이 추가되고 이전 출력 파일이 백업되었으므로 문제가 해결되었습니다.
감사해요
답변3
for name in ../some_directory/*.txt; do
outfile="$name"-out
command (containing -i "$name" -o "$outfile");
done
이는 단순히 입력 파일 이름에 문자열을 추가하여 출력 파일 이름을 구성합니다 -out
.
파일 이름의 경로도 포함되어 있으므로 이는 outfile=out-"$name"
작동하지 않습니다 .$name
파일 이름 앞에 문자열을 추가하시겠습니까? 당신은 이것을 할 수 있습니다
outdir=${name%/*} # remove filename component from $name
outfile=out-${name##*/} # remove the path component from $name (and prepend string)
$outdir/$outfile
그런 다음 출력 파일 경로 로 사용됩니다 .