Loop para editar linhas [RESOLVIDO]

1. Loop para editar linhas [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 20/05/2020 - 13:05h

pessoas .. tenho o arquivo
mauricio@phantom ~/Desktop $ cat 3.csv
10273379291;10273379281;Inexistente;Masculino;Não;70
73107875287;73107875287;Inexistente;Masculino;Não;68
mauricio@phantom ~/Desktop $


preciso comparar o campo1 com o campo 2 ... caso sejam diferente, apagar do ";" até o final da linha .... só consegui apagar de todas as linhas !!

minha ultima tentativa foi
#!/bin/bash

dir1="3.csv"

while read x; do

cp=`echo $x | cut -d';' -f1`
cp1=`echo $x | cut -d';' -f2`

if [ $cp != $cpf ];then

echo $x | sed -i 's/;.*$//' $dir1

fi
done < $dir1





  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/05/2020 - 17:05h

Mauriciodez escreveu:

pessoas .. tenho o arquivo
mauricio@phantom ~/Desktop $ cat 3.csv
10273379291;10273379281;Inexistente;Masculino;Não;70
73107875287;73107875287;Inexistente;Masculino;Não;68
mauricio@phantom ~/Desktop $


preciso comparar o campo1 com o campo 2 ... caso sejam diferente, apagar do ";" até o final da linha .... só consegui apagar de todas as linhas !!

minha ultima tentativa foi
#!/bin/bash

dir1="3.csv"

while read x; do

cp=`echo $x | cut -d';' -f1`
cp1=`echo $x | cut -d';' -f2`

if [ $cp != $cpf ];then

echo $x | sed -i 's/;.*$//' $dir1

fi
done < $dir1


Boa tarde Mauricio.
O problema do seu script, é que não definiu a "linha" que deve ser alterada, logo, altera todas.
Seguem Sugestões:
#Se campo 1 == campo 2, printa a linha completa, senão printa somente campo 1.
awk -F";" '{if($1==$2) print $0;else print $1}' arq 

#Faz o mesmo, porém, altera o arquivo, e gera um ".bak".
gawk -i inplace -v INPLACE_SUFFIX=.bak -F";" '{if($1==$2) print $0;else print $1}' arq 

O seu Script Funcionando . . .

while read line;do
IFS=";" read -a fld <<< "$line";
[[ "${fld[0]}" != "${fld[1]}" ]] && sed -i "/^${fld[0]}/s/;${fld[1]}.*$//" arq
done<arq

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

3. Re: Loop para editar linhas

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 20/05/2020 - 16:24h

Tente assim:
$ cat arq 
10273379291;10273379281;Inexistente;Masculino;Não;70
73107875287;73107875287;Inexistente;Masculino;Não;68

$ awk -F ';' '$1 != $2 {gsub (";"," "); print $0}' arq
10273379291 10273379281 Inexistente Masculino Não 70

Seria +/- isso?



4. Re: Loop para editar linhas

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 22/05/2020 - 11:50h

Depois eu vou testar a ideia de vc's ... a principio tks.





------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




5. Re: Loop para editar linhas [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 02/06/2020 - 14:57h


msoliver escreveu:
[b]Se campo 1 == campo 2, printa a linha completa, senão printa somente campo 1

awk -F";" '{if($1==$2) print $0;else print $1}' arq 



perfeito !! valew.

NOTA: Rola um "replace" ou tenho que direcionar para outro arquivo ???


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




6. Re: Loop para editar linhas

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/06/2020 - 16:25h

Mauriciodez escreveu:


msoliver escreveu:
Se campo 1 == campo 2, printa a linha completa, senão printa somente campo 1

awk -F";" '{if($1==$2) print $0;else print $1}' arq 



perfeito !! valew.

NOTA: Rola um "replace" ou tenho que direcionar para outro arquivo ???


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



Se "replace", refere-se a "alterar" o próprio arquivo, é possível com o -i inplace "gawk", conforme citado.
OBS.: É importante ler a RESPOSTA inteira..... Rsrsrsrsrsrsrs

______________________________________________________________________
[b]Importante:
echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


7. Re: Loop para editar linhas [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 03/06/2020 - 11:01h


Obrigado aí pessoas .. acabei usando assim


awk -F";" '{if($1==$2) print $0}' $dir4 > $dir1
awk -F";" '{if($1!=$2) print $1}' $dir4 > $dir3


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts