비슷한 이름의 파일 병합

비슷한 이름의 파일 병합

[![여기에 이미지 설명 입력][1]][1]다음과 같은 파일 세트가 있습니다.

lh.aparc.DKTatlas40.stats
lh.BA.stats
lh.curv.stats
lh.wg.pct.stats
rh.aparc.DKTatlas40.stats
rh.BA.stats
rh.curv.stats
rh.wg.pct.stats
lh. aparc.a2009s.stats
lh.aparc.stats
lh.BA.thresh.stats
lh.entorhinal_exvivo.stats
rh.aparc.a2009s.stats
rh.aparc.stats
rh.BA.thresh.stats
rh.entorhinal_exvivo.stats

각 "rh" 파일을 각 "lh" 파일과 결합하고 싶습니다. 예를 들어 lh.aparc.DKTatlas40.stats + rh.aparc.DKTatlas40.stats = merge.aparc.DKTatlas40.stats를 결합해야 합니다.

어떻게 해야 합니까?

답변1

for lh in lh*; do
    cat "$lh" "rh${lh#lh}" >"merge${lh#lh}"
done

이렇게 하면 각 lh파일을 해당 파일과 rh연결 하고 연결된 버전을 ( 파일 이름에 있는 내용이 merge뒤에 오는 ) 이름으로 저장합니다.lh

매개변수 확장은 값의 시작 부분에서 문자열을 제거합니다 ${lh#lh}(예: 로 캐스팅).lh$lhlh.BA.stats.BA.stats

답변2

파일이 쌍으로 연결되어 있으므로 하나를 반복하여 다른 파일의 이름을 직관적으로 알 수 있습니다.

for f in lh.*; do
    cat "$f" "${f/lh/rh}" > "${f/lh/merge}"
done

위의 루프는 merge.*.stats각 lh/rh 쌍에 대해 하나의 파일을 생성합니다.

이 구성은 ${var/foo/bar}변수의 첫 번째 인스턴스를 ; 먼저 파일 이름을 직관적으로 쌍으로 묶은 다음 연결된 병합 결과에 대한 파일 이름을 정의하기 위해 이 작업을 수행합니다.foovarbar

관련 정보