+ Responder ao Tópico



  1. #1

    Padrão Script para ler duas linhas por vez na variavel

    Fala galera, como estão as coisas?

    Pessoal, me surgiu uma duvida aqui e não sei como fazer..

    ex:

    tenho o arquivo dados.txt, dentro deste arquivo tem as seguintes informações:
    nome: dunha
    tel: 1234-5678
    nome: zeca vallo
    tel: 3322-6548
    nome: tadeu
    tel: 89521-4567
    o que eu quero é ler este arquivo, mas das linhas por vez..

    se eu fizer:

    Código :
    for i in `cat dados.txt`; do
       echo $i;
    done

    a saída será uma linha de cada vez..

    mas quero que tenha opção de trabalhar com as duas linhas por vez...

    alguém consegue refrescar minha mente??

    valeu

  2. #2

    Padrão

    Poxa, mas registro multilinha é complicado... tenta assim:

    Código :
    #!/bin/bash
    	arquivo=( `cat $ARQUIVO` );
    	for((i=0;i<${#arquivo[@]};i+=2)); do
    		echo "Elemento $i --> "${arquivo[$i]}"\n"${arquivo[$i+1]}"";
    	done;

    Dá pra melhorar isso aí fazendo com sed, mas pelo horário do meu post, eu nem pesquisei muito. Não cheguei a testar também, mas provavelmente vai resolver seu problema


    Abraços!
    Última edição por xstefanox; 10-03-2007 às 04:55. Razão: Código-fonte com um pequeno defeitinho.

  3. #3

    Padrão

    Eu cheguei a fazer um para esse função, abaixo o shell script na íntegra.
    Notar que tem dois echo em comentario, eu chamo de *modo teste*, para ver na tela o que ele pega como L1 e L2.

    ##-----------------------------------------------
    #!/bin/sh

    if [ "$#" = "0" ]; then
    echo -e "\nDigite $0 ArquivoOrigen \n"
    else
    FAZ="1";
    OK="0";
    while read LINHA; do
    if [ $FAZ ]; then
    L1=`echo $LINHA | sed -e 's/\n/ /g'`;
    FAZ="0";
    else
    L2=`echo $LINHA | sed -e 's/\n/ /g'`;
    FAZ="1";
    OK="1";
    fi
    if [ $OK ]; then
    # echo "L1 - $L1";
    # echo "L2 - $L2";
    echo "$L1$L2\n";
    OK="0";
    fi
    done < $1
    ##--------------------------------------------------

  4. #4

    Padrão

    Citação Postado originalmente por lucianogf Ver Post
    Fala galera, como estão as coisas?

    Pessoal, me surgiu uma duvida aqui e não sei como fazer..

    ex:

    tenho o arquivo dados.txt, dentro deste arquivo tem as seguintes informações:


    o que eu quero é ler este arquivo, mas das linhas por vez..

    se eu fizer:

    Código :
    for i in `cat dados.txt`; do
       echo $i;
    done

    a saída será uma linha de cada vez..

    mas quero que tenha opção de trabalhar com as duas linhas por vez...

    alguém consegue refrescar minha mente??

    valeu
    Minha sugestão "one line", simplificado:

    sed '/nome/N ; s/\n/ /g' arquivo.txt

    N concatena duas linhas, e as separa por \n (substituido pelo segundo comando do sed)
    pode-se perceber q fiz o endereçamento pelo "nome"
    se vc tiver um padrão de arquivo bem definido, ele pode ser omitido:

    sed 'N ; s/\n/ /g' arquivo.txt

    T+