Eu tenho um arquivo abc.csv
que tem o conteúdo abaixo.
a6caa290d03ae75dd5f3bf9214f0b523;CO.jar,a6caa290d03ae75dd5f3bf9214f0b523;CO.jar,
a1a5bf1547f50feea4120290343f89e4;Common.jar,a1a5bf1547f50feea4120290343f89e4;Common.jar,
1264897ea44d85c3f0dba127ff02f514;DA.jar,1264897ea44d85c3f0dba127ff02f514;DA.jar,
e77834d4ba2a4193b94fee9470a458a4;FW.jar,e77834d4ba2a4193b94fee9470a458a4;FW.jar,
Preciso ler o arquivo linha por linha e comparar os valores que está antes e depois ,
Se ambos forem iguais, escreva SUCCESS
no mesmo final de linha senão FAILURE
no mesmo final de linha.
Eu tentei o abaixo.
for I in `cat abc.csv`
do
VAR1=`echo $I | awk -F"," {'print ${1}'}
VAR2=`echo $I | awk -F"," {'print ${2}'}
if [ ${1} == ${2} ]
then
..
fi
done
Não sei como adicionar SUCCESS
ou FAILURE
no final de cada linha. Alguma idéia de como isso pode ser alcançado!
Você pode fazer tudo no awk. o awk executa seu script para cada linha em sua entrada
A instrução awk
print x y
imprime as expressõesx
ey
uma ao lado da outra, sem espaço em branco ou separador de campo entre elas.A expressão awk
a ? b : c
significa "sea
for verdadeiro entãob
senãoc
".Tente isso,
E um forro:
Tente também
Certifique-se de que seus arquivos de entrada percam os terminadores de linha do DOS (
<CR>
= \r = 0x0D = ^M) antes de executar isso. Se estiver satisfeito com o que você vê, redirecione para um arquivo de resultadoUsando GNU
sed
(ot
comando precisa de um rótulo se terminar com;
no padrãosed
):Um exemplo em que duas linhas geram
FAILURE
:O
sed
script com anotações:Para realizar uma edição in-loco com GNU
sed
, use o comando acima mas comsed -i
no lugar desed
.Explicação de
/^\([^,]*,\)\1/
: Se esta expressão regular corresponder, a substituição seguinte será executada e será adicionadaSUCCESS
no final da linha. A expressão regular corresponde a uma string no início de uma linha até e incluindo a primeira vírgula. Em seguida, ele tenta corresponder essa mesma string novamente imediatamente após a primeira. O\1
fará referência à string correspondida por\(...\)
.