Ajuda com Shell Script [RESOLVIDO]

1. Ajuda com Shell Script [RESOLVIDO]

Eduardo da Silva Carvalho
duducarvalho86

(usa Red Hat)

Enviado em 03/08/2018 - 17:44h

Oi Pessoal, td bom?

Não sou programador nem nada parecido mas trabalho com aplicações que rodam em Linux.
Trabalho manipulando muitos arquivos de texto e estudando um pouco aprendi várias ferramentas/comandos que me ajudam bastante automatizando várias rotinas, porém agora estou com um problema um pouco maior que não sei como resolver... vou colocar um exemplo e se alguém pudesse ajudar, ficaria muito agradecido.

Ex:

12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59
12345.66,1,Teste,1,20041023,122029.66,-11.02410984,-48.99973679,-11.02453111,-49.00017167,5546398.78,8776303.58
12345.70,1,Teste,1,20041023,122029.70,-11.02408314,-48.99973679,-11.02450417,-49.00017278,5546398.71,8776306.58
12345.70,2,Teste,1,20041023,122029.70,-11.02408314,-48.99973679,-11.02450417,-49.00017278,5546398.71,8776306.58

Eu tenho esse arquivo texto que contém mais de 1 milhão de linhas com dados nessa mesma estrutura, eu preciso copiar ao final de cada linha [,(o valor que está depois da primeira virgula),contador]

Ex:

12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,1,1
12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,1,2
12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,1,3
12345.62,2,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,2,4

Esse "1 e 2" que aparecem antes do contador é exatamente a cópia do valor que vem antes da "," anterior ao "Teste"

Basicamente seria adicionar ao final de cada linha uma "," e copiar o valor que vem depois da primeira virgula de cada linha, depois adicionar mais uma "," e um contador começando em 1 até a última linha do arquivo.

Desde já agradeço qualquer ajuda que vier.

Obrigado


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/08/2018 - 21:00h

duducarvalho86 escreveu:

Oi Pessoal, td bom?

Não sou programador nem nada parecido mas trabalho com aplicações que rodam em Linux.
Trabalho manipulando muitos arquivos de texto e estudando um pouco aprendi várias ferramentas/comandos que me ajudam bastante automatizando várias rotinas, porém agora estou com um problema um pouco maior que não sei como resolver... vou colocar um exemplo e se alguém pudesse ajudar, ficaria muito agradecido.

Ex:

12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59
12345.66,1,Teste,1,20041023,122029.66,-11.02410984,-48.99973679,-11.02453111,-49.00017167,5546398.78,8776303.58
12345.70,1,Teste,1,20041023,122029.70,-11.02408314,-48.99973679,-11.02450417,-49.00017278,5546398.71,8776306.58
12345.70,2,Teste,1,20041023,122029.70,-11.02408314,-48.99973679,-11.02450417,-49.00017278,5546398.71,8776306.58

Eu tenho esse arquivo texto que contém mais de 1 milhão de linhas com dados nessa mesma estrutura, eu preciso copiar ao final de cada linha [,(o valor que está depois da primeira virgula),contador]

Ex:

12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,1,1
12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,1,2
12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,1,3
12345.62,2,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,2,4

Esse "1 e 2" que aparecem antes do contador é exatamente a cópia do valor que vem antes da "," anterior ao "Teste"

Basicamente seria adicionar ao final de cada linha uma "," e copiar o valor que vem depois da primeira virgula de cada linha, depois adicionar mais uma "," e um contador começando em 1 até a última linha do arquivo.

Desde já agradeço qualquer ajuda que vier.

Obrigado

Boa noite, DuduCarvalho.
Segue:
awk -F"," '{OFS=",";print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $2, $4}' texto 
12345.62,1,Teste,1,20041023,122029.62,-11.02413654,-48.99973679,-11.02455806,-49.00017083,5546398.82,8776300.59,1,1
12345.66,1,Teste,2,20041023,122029.66,-11.02410984,-48.99973679,-11.02453111,-49.00017167,5546398.78,8776303.58,1,2
12345.70,1,Teste,3,20041023,122029.70,-11.02408314,-48.99973679,-11.02450417,-49.00017278,5546398.71,8776306.58,1,3
12345.70,2,Teste,4,20041023,122029.70,-11.02408314,-48.99973679,-11.02450417,-49.00017278,5546398.71,8776306.58,2,4

Outra opção. (a anterior é bem mais rápida)
while read -r line; do 
IFS="," read -a CAMPO <<< "$line";
printf '%s,' "${CAMPO[@]}"; printf '%s,' "${CAMPO[1]}";printf '%s\n' "${CAMPO[3]}";
done<texto

Att.:
Marcelo Oliver

3. Re: Ajuda com Shell Script [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 03/08/2018 - 19:59h

Vejaí se resolve:
#!/bin/bash
i=1
while read -r line; do
valor=`echo $line | cut -d, -f2`
echo $line,$valor,$i >> saida.txt
let i++
done < entrada.txt

Obs: adapte a sua realidade; o script vai gerar um arquivo "saida.txt" a partir do arquivo original (entrada.txt).






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts