Ajuda Vários Scripts para gerir ficheiros!!! [RESOLVIDO]

1. Ajuda Vários Scripts para gerir ficheiros!!! [RESOLVIDO]

Pedro
MetaBolic0

(usa Outra)

Enviado em 03/02/2012 - 09:06h

Olá a todos, mais uma vez venho pedir a ajuda da comunidade para resolver um problema no meu trabalho.

O meu problema é meio complicado de explicar e provavelmente muito fácil mas eu preciso muito pouco de Script e quase nada sei.

1º problema

Então é assim:

Eu tenho cerca de 25 dados num ficheiro e 850 noutro, separei cada um desses ficheiros em 3 partes com linhas iguais ficando com por exemplo L1, L2 e L3 e D1, D2 e D3 (respectivamente para o 1º e 2º ficheiros)Os dados são linhas assim: +1 1:1995 2:54.91665 3:985.89173 4:1.19031 e servem para correr mais tarde num programa.

Os ficheiros L1, L2 e L3 não precisam ser mais mexidos mas os ficheiros D1, D2 e D3 têm de ser separados por linhas desde 5 até 35 vezes para tal fiz o seguinte script


#!/bin/bash

echo "Criar Ficheiros de Dados"
# Loop dos ficheiros
for f in $( ls Decoys_Dataset_* )
do
dout=Parts-$f
rm -rf $dout
mkdir $dout
# Criar as Separacoes e Directórios
for((n=5 ; n<36 ; n++))
do
l=`expr 283 / $n`
sdout="$dout/$n/"
mkdir $sdout
# Separar os Ficheiros
split -$l --numeric-suffixes $f "$sdout"
done
done
echo "Fim"

O que o script me faz é separar cada um desses ficheiros D que contém 283 linhas em pastas correspondentes a cada divisão. O problema é que usando o "expr" acabo sempre por ter 1 ficheiro com 3 ou 4 linhas correspondentes ao resto da divisão. Ou seja no caso da divisão em 5 em vez de obter 5 ficheiros com 56 linhas obtenho 5 ficheiros com 56 linhas e um 6º ficheiro com 3 linhas.

Portanto o que precisava agora era que o último ficheiro que contem as 3 linhas que sobram, pudesse ser dividido por 3 dos outros ficheiros ficando com 3 ficheiros com 57 linhas e 2 ficheiros com 56 linhas só que não consigo fazer esse split. E isso teria de fazer para todas as outras pastas que também têm sempre um ficheiro com linhas a mais.

---------------------------- ´´ ------------------------------- ´´ -------------------------
2º Problema

Depois de ter todos esses ficheiros separados pelas pastas correspondentes precisava criar um script que me junta-se cada um desses resultados com os ficheiros L. Ou seja o L1 teria de juntar com todos os ficheiros separados provenientes do D1, D2 e D3 e neste caso nem sei como ei-de fazer o script se com Cat e Loop ou se existe outra maneira pois tenho os ficheiros L numa pasta e os outros todos em pastas mais pequenas e como já perceberam as combinações são imensas.

----------------------------- ´´ ----------------------------- ´´------------------------
Como eu não percebo quase nada de Script e trabalho em Biologia aqui também ninguém me sabe ajudar muito por isso agradeço desde já qualquer ajuda que possam dar.

Muito obrigado


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/02/2012 - 05:19h




#!/bin/bash

C=0
for dir in $(ls -d Parts*); do
echo $dir
cd $dir
for subdir in $(ls -d *); do
echo $subdir
cd $subdir
let C=C+1
ARQUIVOS[$C]=`ls | tail -1`
done
cd ..
done

C=0
for LINHA in ${ARQUIVOS[@]}; do
echo ${ARQUIVOS[$C]} >> $LINHA
let C=C+1
done



3. Re: Ajuda Vários Scripts para gerir ficheiros!!! [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 05/02/2012 - 06:45h

[quote]MetaBolic0 escreveu:

O que o script me faz é separar cada um desses ficheiros D que contém 283 linhas em pastas correspondentes a cada divisão. O problema é que usando o "expr" acabo sempre por ter 1 ficheiro com 3 ou 4 linhas correspondentes ao resto da divisão. Ou seja no caso da divisão em 5 em vez de obter 5 ficheiros com 56 linhas obtenho 5 ficheiros com 56 linhas e um 6º ficheiro com 3 linhas.


Portanto o que precisava agora era que o último ficheiro que contem as 3 linhas que sobram, pudesse ser dividido por 3 dos outros ficheiros ficando com 3 ficheiros com 57 linhas e 2 ficheiros com 56 linhas só que não consigo fazer esse split. E isso teria de fazer para todas as outras pastas que também têm sempre um ficheiro com linhas a mais.

[/code]

Faça um novo loop


#!/bin/bash
C=0
ARQUIVOS=(arquivo1 arquivo2 arquivo3)
for LINHA in $( cat arquivo_com_as_linhas_restantes )
do
echo ${ARQUIVOS[$C]} >> $LINHA
let C=C+1
done



Boa Sorte!



4. Re: Ajuda Vários Scripts para gerir ficheiros!!! [RESOLVIDO]

Pedro
MetaBolic0

(usa Outra)

Enviado em 06/02/2012 - 09:51h

Muito obrigado pela ajuda mas eu fiz qualquer coisa mal ou isso não resolveu. Depois de pesquisar fiz outro script tendo em conta que cada uma das minhas pastas alvos têm o mesmo número de pastas lá dentro e que por sua vez estas é que contêm os ficheiros de dados (são todos .txt e não há qualquer outro ficheiro lá. O script é o seguinte:


#!/bin/bash

for dir in $(ls -d Parts*); do
echo $dir
cd $dir
for subdir in $(ls -d *); do
echo $subdir
cd $subdir
lastfile=`ls | tail -1`
echo "O ultimo ficheiro desta pasta eh $lastfile"
cat $lastfile
lines=`cat | wc -l`
split --lines=$lines
echo "split --lines=$lines"
cd ..
done
cd ..
done


O que o script é suposto fazer é entrar nas pastas todas até entrar na pasta onde estão os ficheiros e dizer-me qual o último ficheiro ( e isso está a fazer tudo bem) O problema é que depois de dizer o splite das linhas do último ficheiro não sei como meto a enviar cada uma das linhas para um ficheiro diferente nessa pasta.

Tentei como o amigo me disse e adicionei oloop que me deu deste modo:


#!/bin/bash

for dir in $(ls -d Parts*); do
echo $dir
cd $dir
for subdir in $(ls -d *); do
echo $subdir
cd $subdir
lastfile=`ls | tail -1`
echo "O ultimo ficheiro desta pasta eh $lastfile"
cd ..
done
C=0
ARQUIVOS=(arquivo1 arquivo2 arquivo3)
for LINHA in $( cat $lastfile); do
echo ${ARQUIVOS[$C]} >> $LINHA
let C=C+1
cd ..
done
cd ..
done


Será que alguém me podia dizer o que fiz mal? Penso que o problema é quando faço cat do último ficheir da pasta.

Desde já agradecido pela ajuda




5. Re: Ajuda Vários Scripts para gerir ficheiros!!! [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 06/02/2012 - 11:47h

Então, se vc quer o último arquivo criado na pasta vc pode utilizar o seu `ls | tail -1` desta forma: `ls -ltr | tail -1`.

Tente alterar e veja se resolve!


6. Re: Ajuda Vários Scripts para gerir ficheiros!!! [RESOLVIDO]

Pedro
MetaBolic0

(usa Outra)

Enviado em 06/02/2012 - 12:26h

Depois de andar a tentar e tentar já tenho o scprit que me divide tudo agora só preciso saber como passar cada uma das linhas dentro dos ficheiros xaa xab ... xaetc que o split me da dentro dos primeiros ficheiros já com dados.

O script depois de correcções está assim:

#!/bin/bash

for dir in $(ls -d Parts*); do
echo $dir
cd $dir
for subdir in $(ls -d *); do
echo $subdir
cd $subdir
ultficheiro=`ls | tail -1`
echo "O ultimo ficheiro desta pasta e $ultficheiro"
echo "A separar o último ficheiro por linhas..."
split --lines=1 $ultficheiro
echo "Ficheiros Separados"
cd ..
done
cd ..
done


Seria possível darem-me umas luzes em relação a este último passo? Obrigado




7. Re: Ajuda Vários Scripts para gerir ficheiros!!! [RESOLVIDO]

Pedro
MetaBolic0

(usa Outra)

Enviado em 07/02/2012 - 08:55h

Já percebi qual era o meu problema. Muito obrigado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts