同じ名前のファイルをマージする

同じ名前のファイルをマージする

[![ここに画像の説明を入力][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

ファイルはペアでリンクされているため、1つを繰り返して別のファイルの名前を直感的に知ることができます。

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

上記のループは、merge.*.stats各lh / rhペアに対して1つのファイルを生成します。

この構成は、${var/foo/bar}変数の最初のインスタンスです。まず、ファイル名を直感的にペアで囲んでから、連結したマージ結果のファイル名を定義します。foovarbar

関連情報