for 루프에 명령 출력 추가

for 루프에 명령 출력 추가

나는 일부 입력 파일을 처리하고 파일로 출력을 얻기 위해 간단한 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그런 다음 출력 파일 경로 로 사용됩니다 .

관련 정보