루프에서 두 파일을 연결하는 방법은 무엇입니까?

루프에서 두 파일을 연결하는 방법은 무엇입니까?

새 파일로 연결하려는 2개의 파일이 있지만 다른 디렉터리(a, b, c, g 및 z)와 동일한 2개의 파일이 있으므로 루프를 사용하여 이 작업을 수행하고 싶습니다. 내 루프는 다음과 같습니다

for i in a b c g z
do
    (cd $i/; for i in File_*_best3.txt *_new3.txt; do cat $i > combined.txt; done)
done

하지만 내 결과는 combined.txt두 번째 입력 파일과 정확히 동일한 파일이므로 고양이가 작동하지 않습니다. 여기서 문제가 무엇입니까?

답변1

문제는 cat실행될 때마다 출력 파일이 잘린다(비워진다)는 것이다. 리디렉션을 사용하고 있기 때문입니다 >.

선택하다:

for d in a b c g z
do
    (cd "$d"; rm -f combined.txt; for i in File_*_best3.txt *_new3.txt; do cat "$i" >>combined.txt; done)
done

또는

for d in a b c g z
do
    (cd "$d" && cat File_*_best3.txt *_new3.txt >combined.txt)
done

나는 그것을 가정 File_*_best3.txt하고 *_new3.txt하나의 파일 이름과만 일치합니다.

답변2

다른 솔루션은 다음을 수행하지 않습니다 cd.

for d in a b c g z; do
    cat $d/{File_*_best3.txt,*_new3.txt} >$d/combined.txt
done

관련 정보