Para os feras: (O que estou fazendo de errado?)

1. Para os feras: (O que estou fazendo de errado?)

Isomi Luiz da Silva
clicsis

(usa Debian)

Enviado em 26/04/2008 - 17:05h

O objetivo do script era executar um loop em vários arquivos dentre eles alguns que estão vazio. Ignorar os varios e ao identificar um com conteúdo listar as linhas do mesmo.

O Erro é:
Quando é encontrado o arquivo com conteúdo e com uma única linha, a função que portanto deveria ser executada uma vez, pois esse é o número de linha, ele está executando o loop por quatro vezes, que seria a quantidade de loop externos referente a quantidade de arquivos e não a quantidade de linha.

Abaixo está o Script:
===================================
#! /bin/bash
lstArquivos=("arq1 arq2 arq3 arq4");
# Ler o nome dos arquivos lstArquivos quebrando por espaços (OK)
# LOOP ( >>> A <<< Para os nomes dos arquivos)
for defTitulos in ${lstArquivos[@]}; do
# Ler os arquivos possiveis um a um (OK)
lstTitulos=`echo '/usr/local/ativ_'$defTitulos'.txt'`;
# Verifica o tamanho do arquivo
TamanhoArquivo=$(du $lstTitulos | awk '{print $1}')
# Ignorando arquivos vazios (OK)
if [ $TamanhoArquivo -gt 3 ]; then
# Loop das linhas, de cada arquivo (ERRO)
# O arquivo que tem conteúdo é dado Loop 4 vezes, correspondente a quantidade em lstArquivos
# Quando não deveria por esse seria um Loop interno para pegar as linhas do arquivo
# LOOP ( >>> B <<< Para as linhas contida no arquivo)
for i in `cat -s $lstTitulos`; do
# ERRO: Essa linha se repete por 4 vezes
echo 'Pegando o arquivo: '$defTitulos;
echo $lstTitulos;
done
else
echo 'O arquivo: '$defTitulos' está vazio';
fi
done

Exemplo do erro:
Pegando o arquivo: arq1
linha1
Pegando o arquivo: arq1
linha1
Pegando o arquivo: arq1
linha1
Pegando o arquivo: arq1
linha1
O arquivo arq2 está vazio
O arquivo arq3 está vazio
O arquivo arq4 está vazio
O arquivo arq5 está vazio
===================================

Desde já, agradeço.


  


2. Re: Para os feras: (O que estou fazendo de errado?)

Denis Doria
thuck

(usa Debian)

Enviado em 26/04/2008 - 17:48h

O segundo for é desnecessário, se entendi oq vc quer fazer com o script:

V0.1

#!/bin/bash

lstArquivos=("arq1 arq2 arq3 arq4");

for defTitulos in ${lstArquivos[@]}; do

lstTitulos=`echo $defTitulos`;

TamanhoArquivo=$(du $lstTitulos | awk '{print $1}')

if [ $TamanhoArquivo -gt 3 ]; then

echo 'Pegando o arquivo: '$defTitulos;
cat $lstTitulos;

else

echo 'O arquivo: '$defTitulos' está vazio';
fi
done


Eu faria algo mais parecido com isso:

V0.2

#!/bin/bash

for titulo in arq1 arq2 arq3 arq4; do

if [ -s $titulo ]; then

echo 'Pegando o arquivo: '$titulo;
cat $titulo;

else

echo "O arquivo: $titulo está vazio";
fi
done



3. Re: Para os feras: (O que estou fazendo de errado?)

Isomi Luiz da Silva
clicsis

(usa Debian)

Enviado em 26/04/2008 - 17:58h

Boa tarde. Te agradeço.
Mas acabei ficando com a dúvida quanto as linhas de cada um dos arquivo que é para o que eu estava usando o segundo Loop, ou seja, nesse inicío o arquivo só tinha uma linha, mas futuramente o arquivo poderá ter muito mais que uma linha e para cada uma delas eu precisarei executar um comando, ou seja, eu preciso que após identificar o arquivo o loop seja feito listando as linhas do mesmo.

Os Loops funcionariam assim.
Para cada arquivo um loop mostrando todas suas linhas, uma por vez e só depois iriamos para o próximo arquivo.


4. Re: Para os feras: (O que estou fazendo de errado?)

Denis Doria
thuck

(usa Debian)

Enviado em 26/04/2008 - 18:05h

Algo assim então:

v0.3

#! /bin/bash

for titulo in arq1 arq2 arq3 arq4; do


if [ -s $titulo ]; then

echo 'Pegando o arquivo: '$titulo;

while read LINHA;do


echo $LINHA


done < $titulo

else

echo "O arquivo: $titulo está vazio";
fi
done



5. Re: Para os feras: (O que estou fazendo de errado?)

Isomi Luiz da Silva
clicsis

(usa Debian)

Enviado em 26/04/2008 - 18:23h

Valeu mesmo cara, fou tentar agora mesmo!


6. Re: Para os feras: (O que estou fazendo de errado?)

Isomi Luiz da Silva
clicsis

(usa Debian)

Enviado em 26/04/2008 - 18:35h

Funcionou perfeitamente, muitíssimo obrigado cara.
Valeu mesmo.


7. Re: Para os feras: (O que estou fazendo de errado?)

Denis Doria
thuck

(usa Debian)

Enviado em 26/04/2008 - 23:31h

De nada cara...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts