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
______________________________________________________________________