Fala Nander, Não estou chamando a tua atenção, mas te dando uma dica: os Correios são grande usuários de Sw Livre e, portanto, deve ter um monte de profissionais de lá nesta lista.
Somente retificando uma informação que rolou, o default do $IFS não é só espaço em branco. É <espaço> <tab> e <enter>. Se vc quer estudar direto o funcionamento do IFS, faça-o aqui<https://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo005#Inter_Field_Separator_Tabajara_I> . -- Abraços, Julio Cursos de Shell e Zenity? - Em SP ligue (11) 2125-4747; - Em DF ligue (61) 3223-3000; - No RJ darei um treinamento em 23, 24 e 25/07 (p/ detalhes ligue (21) 2561-0867); - Turmas fechadas em outras cidades ligue (21) 8112-9988 2009/7/9 Ernander (Nander) <[email protected]> > > > 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] <boxferrari%40gmail.com>> > > > > > > > --- Em > > [email protected]<shell-script%40yahoogrupos.com.br><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] > > > [As partes desta mensagem que não continham texto foram removidas]
