vboas
(usa Red Hat)
Enviado em 14/10/2015 - 14:31h
Olá Linuxers (&& programmers), tudo bem?
Espero que sim.
Sou novo em programação AWK, e acreditem, eu já procurei por N exemplos de como utilizar as funções sub, gsub, e gensub no AWK, porém, sem sucesso. Por isso, estou recorrendo ao fórum, espero que possam me ajudar. :)
Tenho um arquivo de texto (files.txt) que possui MILHÕES de registros, com o conteúdo semelhante ao descrito abaixo:
/storage1;read;./conta1.txt
/novostorage2;read;./conta1.txt.bkp
O caminho absoluto do arquivo "conta1.txt" é em "/storage1/conta1.txt", o caminho absoluto do arquivo "conta1.txt.bkp" é o "/novostorage2/conta1.txt.bkp". Utilizando o AWK, eu preciso pegar o caminho absoluto dos arquivos, então eu fiz o seguinte:
$ awk -F";" '{ print $1 $3}' files.txt
Ele me retornou o seguinte conteúdo:
/storage1./conta1.txt
/novostorage2./conta1.txt.bkp
Observem, que ele me trouxe o ".", e para o que eu preciso (processar milhões de registros por outro script), eu não posso ter este ponto.
Então, tentei uma concatenção com o AWK, fazendo o seguinte:
awk -F";" '{ print $1 $3}' files.txt | awk -F"." '{ print $1 $2 $3}'
Mas o problema mora justamente ai, se eu utilizar o "." como delimitador, eu não sei quantos pontos poderá ter um determinado registro, logo eu não posso especificar com precisão quais serão os campos que devem ser printados como resultado. Logo então, eu fui atrás do sub, gsub ou gensub. Porém, fica ai grande dificuldade dessa lógica de programação.
Dada o resultado:
/storage1./conta1.txt
/novostorage2./conta1.txt.bkp
Pegar tudo o que for "x" e substituir por "y", ok - isso eu consegui fazer. A dúvida é:
Como pegar apenas o PRIMEIRO "." (ponto) que antecede a "/" (barra) e suprimi-lo? (fazê-lo desaparecer) Sem alterar os "." (pontos) subsequentes dos nomes dos arquivos?
PS: Se tiverem outra maneira de fazer sem ser por AWK, esta valendo também. ;)
Se puderem me ajudar, ficarei muito, mas muito grato!
Obrigado desde já!