[![在此处输入图像描述][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