Combine arquivos com nomes semelhantes

1

[! [insira a descrição da imagem aqui] [1]] [1] Eu tenho o seguinte conjunto de arquivos:

lh.aparc.DKTatlas40.stats
lh.BA.stats
lh.curv.stats
lh.w-g.pct.stats
rh.aparc.DKTatlas40.stats
rh.BA.stats
rh.curv.stats
rh.w-g.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

Eu quero combinar cada arquivo 'rh' com cada arquivo 'lh' Por exemplo, eu preciso combinar lh.aparc.DKTatlas40.stats + rh.aparc.DKTatlas40.stats = merge.aparc.DKTatlas40.stats

Como faço isso?

    
por Shreya Chakrabarti 23.02.2017 / 19:05

2 respostas

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

Isso concatenará cada arquivo lh com o arquivo rh correspondente e salvará a versão concatenada como merge (seguido pelo que vier depois de lh no nome do arquivo).

A expansão do parâmetro ${lh#lh} removerá a string lh do início do valor de $lh (por exemplo, transformar lh.BA.stats em .BA.stats ).

    
por 23.02.2017 / 19:19
0

Como seus arquivos estão emparelhados, você pode percorrer um e intuir o nome do outro:

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

O loop acima criará um arquivo merge.*.stats para cada par lh / rh.

A construção ${var/foo/bar} substituirá a primeira instância de foo na variável var com bar ; Fazemos isso primeiro para intuir o nome do arquivo emparelhado e, em seguida, para definir o nome do arquivo para o resultado mesclado da concatenação.

    
por 23.02.2017 / 19:21

Tags