Ok !!! Como te disse Comprei o Livro do Julio... Mas ele veio com defeitos e o Devolvi. E como o novo chegou to indo aos poucos e testando, mas vou pular para a parte do IFS
valeu mesmo! P.S o Site dos Correios é um Lixo mesmo . .... Att Ernander 2009/7/9 Cristiano Ferrari <[email protected]> > > > --- Em [email protected] <shell-script%40yahoogrupos.com.br>, > "Ernander (Nander)" <ernan...@...> escreveu > > > > > Bom dia A Todos! > > > > Primeiramente gostaria de pedir Desculpas pela gafe do e-mail em html. E > > para me redimir todos os exemplos que darei são impreterivelmente no > > pastebin. Segundo que eu estive fora e não pude responder em tempo as > > atenções ao meu problema. > > > > Voltando ao assunto, estou comendo ER's para tentar enten der e fazer > tudo > > para obter um melhor resultado. A Solução do Cristiano Ferrari, como > sempre > > um grande colaborador da Lista, ajudou muito mas com o "head -n 2" estava > > pegando uma linha a mais, o que foi consertado com um "head -n 1" ( > basico > > he he ) . > > > > Ate agora Bakana! O problema Agora é : > > > > como recebo um arquivo com as movimentações mensais desta forma: > > > > ver 1º Exemplo do pastebin > > > > preciso pegar o nome do Cliente (2º Campo), data da postagem (6º campo), > > numero da encomenda (7º campo) e jogar junto com o retono da verificação > > junto ao site dos correios a Data(1º campo de retorno), hora(segundo > campo > > de retorno) e o Status da encomenda( último campo de retorno) ( vide 2º > > exemplo pastebin). > > > > Nisso montando a Seguinte saída: > > > > Vide 3 exemplo pastebin > > > > Bom ate então, com a ajuda de vocês a tarefa parecia simples mas quando > me > > deparei que tem cidade com um nome maior que do de DOM PEDRO PRIMEIRO, e > que > > não conseguia buscar com um padrão o Status e nem o nome do Cliente pois > o > > numero de espaços é enorme e quase não é mensurável. > > > > Como fazer para pegar a String com espaços tanto no nome do Cliente ( > > Arquivo de entrada) e do so Status na pesquisa do site ( sabendo que tem > > Cidades com nomes muito grandes) > > > > o meu simplório script segue: > > > > Vide exemplo 4 do pastebin: > > > > Se eu jogo o resultado da busca no site em uma variável RESULTADO da > > busca no site e tento pegar somente o que me interessa assim: > > > > echo $RESULTADO | awk '{ print $1 ";" $2 ";" $4 }' > > > > Não Consigo pegar Somente o Status pois tenho Status Diversos como > entregue > > e Aguardando retirada. O mesmo ocorre qdo tento pegar o nome do Cliente > que > > tem espaços. ja no caso do Cliente eu poderia remover os Espaços do > Arquivo > > e trocar por UNDERLINE mas como proceder no retorno do Site? > > > > Julio, como estou comendo o Seu LIVRINHO ( HE HE HE ), Aliás muito bom e > > estou engatinhando nas ER's poderia me explicar a Sua onlinER ? pois não > > funcionou aqui comigo. Quando vc se refere a arquivo na ER: > > > > > > grep -A2 '[0-3][0-9]/[0-1][0-9]/20[0-1] [0-9] [0-2][0-9]:[0-5][0-9]' > arquivo > > | tail -2 | tr -d '\n' > > > > Não entendi pois o retono é via pesquisa do Lynx e tambem havia > substituido > > pela ER do Cristiano e não deu certo. > > > > > > valeu mesmo a ajuda e contem comigo no que eu puder ajudar! > > Ilustre Ernander. > > Se você tem o livro do Júlio, dá uma procurada nele sobre a variável $IFS > (internal field separator). É por ela que você começa a solução do seu > problema. > > Primeiro, você não precisa passar a linha inteira no while e depois ficar > cortando ela para achar os seus campos. Teu arquivo de origem é um CSV > (delimitado por ";"), você já tem os campos separados. Basta informá-los ao > while com uma sintaxe parecida com isto: > > while read VAR1 VAR2 ... VARn ; do > comando1 > comando2 > done < /tmp/arquivo_origem.txt > > Para cada campo no seu arquivo de origem, informe o nome de uma variável > após o read (CAMPO1=VAR1, CAMPO2=VAR2, etc.). > > Daí, é só pegar o campo certo e fazer o que precisa com ele dentro do laço. > > Porém, para que isso aconteça, é necessário que o shell reconheça que os > ";" do seu arquivo original são os separadores de campos. Por padrão, o IFS > do bash é o caracter espaço. Para mudar isso, basta, antes do laço (while), > mudar o IFS; atribuindo outro valor para a variável $IFS. > > Porém, antes de mudar o valor, lembre-se de guardar o original em outra > variável, e voltar a ele logo após o fim do laço (done). Senão, "coisas > estranhas" podem acontecer. > > Outro detalhe. Para concatenar o BR no número do track, você não precisa > fazer isso: > > ENCOMENDA=`echo $CODIGO`BR > > Basta um ENCOMENDA="$CODIGO"BR. Assim, você evita chamar mais um processo > desnecessário (o echo) e concatena o "BR" no momento que o bash faz a > expansão das variáveis. (isso também tá no livro do tio Júlio). > > Aliás, no seu caso, você nem precisa se dar o trabalho de fazer isso, basta > acrescentar o BR como parte da URL que passa ao lynx. Economiza mais uma > etapa no script. > > Já o problema do tamanho do nome da cidade você resolve fácil. > > Lembra da dica do Júlio, de trocar o meu sed pelo tr? Adapta ela. > > Usa o tr, mas ao invés de fazer com parametro -d, para excluir a ocorrência > da quebra de linha, troca por um caracter qualquer, que te servirá de > marcador para um cut. Por exemplo o #. > > Assim, você faz um cut para pegar a data, outro para a hora (usando o > espaço como delimitador) e um outro cut para pegar o staus (usando o # como > delimtador). Pode também trocar os dois primeiros cuts por um um while, > usando a mesma lógica que te expliquei no início. > > Então, dentro do laço, você joga o resultado da pesquisa vinda do lynx em > uma variável, depois corta ela e atribui a data em uma variável, a hora em > outra, e o status em outra. > > Como você já tem os valores do arquivo original é só fazer um echo com > todas variáveis (as que vieram do links e as do arquivo original), > intercalados com os ";", e terá a saída redondinha. > > Geralmente não gosto de postar o script pronto, pois acho que te tira a > possibilidade de aprender. Então, tenta escrever ele aí que mais tarde e > posto o meu para você comparar. Até mesmo porque, agora o site dos correios > está um coco de lento e não vou postar o script sem testá-lo. > > Abraço > > Cristiano > > Abraço > > > -- ╔═══════════════════╗ ║ Ernander Lataliza ║ ╚═══════════════════╝ -------------------------------------- SEJA LIVRE! USE LINUX! Linux User #394812 -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.6 (GNU/Linux) mQGiBEnrmpwRBADsGwMo8R2spUxfer19bGyX5mAXRyEhm5vlzkOH9T7Fe4WyAvLM rDpSKjv1VgcC3/fSMpPQ8MmQZwwO4H87IIwyN0AX/NqvmEQDNMVZS6omrcN39jpt xEC80Hs/TP/yKyB2V6seHV0eZtjlfmokIb7nYazcxTLAhiv9CVg9nL+JCwCg+gNL R+1rQcqGooGtjIL95OZr/8kEANpGy/Jb+B7Ajq4gatJ6qoedDyeyFFDRz8aV1OBJ TCRh9T8MWjOhwvgcsGQV7R95VHgJNVGnej6yilMoM3NtIcyA2tbXAUerp5QhRAAi 2BU50z2JF5wl7YQ5ocSpOxp5Cq4sEBJYa/gTUzbLzztNc+ezCIKV403kEbE2IqSV 9rt3A/4vxcKsh9IX1At+vH9Ev850CXlRyxN4H7tRlGL+OdqQ76SR3tMi1qm4NRIp p0Y7gJ8k9YdfWCgm56aLlSCCXlr80TXP5WHEH+sz2yDrw6iCj5ABeBMA5tdTae5y bpx9QJgu5+1dYAK+FFWM+czPO11FM6nOKC3N+XSvrmM88dQhg7RHRXJuYW5kZXIg TWFyY3VzIExhdGFsaXphIFJvc2VuZG8gKE5hbmRlciBMYXRhbGl6YSkgPGVybmFu ZGVyQGdtYWlsLmNvbT6IYAQTEQIAIAUCSeuanAIbAwYLCQgHAwIEFQIIAwQWAgMB Ah4BAheAAAoJEKahazXSKEoo15oAoPBiOWjUw0I2a6u7MtDPPwNPebG3AKDsoBuT tcC4MzB17iNsOq819aV42rkBDQRJ65qdEAQApuFxoXRdeQrFIOJDyxE2EQi3GZby 2RP0+6iWiLbMk3XUGVsc477NTeGkEuDQA0SpkA5whL4wHWHCrYaE9rtmYMYW67ml z/PUPWGI78cQ/R7M1ADPLGaD7cSxfdWzIHbhkP29x4zHTkSrdl4zT+XOHXwmAULp ekzuKdb6whw676MAAwUD/isUOzlyF5sf/Q7RJRmLjOEEn5gpL/pf7ZzWHNxgxsPH s1LlicO2yObH1cuVDXQDsc3a6ag61z1gCapa8Q1L/E5akKpU0irRzf99yNVzTp3i BD9cua7h7fnfBMp6D4EyLDnUkCxOMD5HdIik1Ie6iHoVdCeDpYFnv72RplPI3dBB iEkEGBECAAkFAknrmp0CGwwACgkQpqFrNdIoSiiUYgCgvHpf/Tkub4sWz/Vj91y6 BgH84hQAn3Z8pVMAUMJmmH/jRqJg49SS8AHc =1sQ8 -----END PGP PUBLIC KEY BLOCK----- [As partes desta mensagem que não continham texto foram removidas]
