[![여기에 이미지 설명 입력][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
$lh
lh.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}
변수의 첫 번째 인스턴스를 ; 먼저 파일 이름을 직관적으로 쌍으로 묶은 다음 연결된 병합 결과에 대한 파일 이름을 정의하기 위해 이 작업을 수행합니다.foo
var
bar