Você não precisa de dois loops. Você precisa de um único loop, através de a
, b
, c
etc. Assim:
for i in *.ID; do
b=${i%%.ID}
cat "$i" "$b".value >"$b".txt
done
Eu tenho duas listas de arquivos que terminam com duas extensões diferentes e gostaria de concatená-las em pares, em um loop. Os nomes dos arquivos se parecem com estes:
Estes são os arquivos
a.ID, b.ID, c.ID, d.ID
a.value, b.value, c.value, d.value
intuitivamente eu faria:
for i in *.ID;
do
for j in *.value;
do
cat $i $j > $i.txt ; done
done
O problema é que gostaria de mesclar a.ID
com a.value
e b.ID
com b.value
e, desse modo, eles são mesclados aleatoriamente. Como a.value
com b.ID
etc ..
Alguma ideia? Agradecemos antecipadamente
Exemplo de entrada a.ID
(por exemplo):
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
Amostras terminadas com a.value
(por exemplo):
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0
chr1_901_1201 0 0
chr1_1201_1501 0 0
saída:
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0
chr1_901_1201 0 0
chr1_1201_1501 0 0
Só porque é possível fazer isso, aqui está a abordagem find
+ bash
.
$ ls
a.ID a.value
$ find -type f -iname "*.ID" -exec bash -c 'base=$(basename -s ".ID" "$@");cat "$@" "$base".value > "$base".merged' sh "{}" \;
$ ls
a.ID a.merged a.value
$ cat a.merged
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0