Como comparar strings variáveis dentro de uma linha

0

Estou lutando com o grep, o awk e o sed com esse problema. Eu tenho um XML com linhas como estas:

<field type="float8" name="something" database_fieldname="SHORT" allowsnull="false"/>
<field type="float8" name="LONG" database_fieldname="LONG" allowsnull="false"/>

Eu quero isolar essas linhas onde os valores para nome = e database_fieldname = são idênticos e, se for o caso, remover o campo inteiro database_fieldname = . Saída esperada:

<field type="float8" name="something" database_fieldname="SHORT" allowsnull="false"/>
<field type="float8" name="LONG" allowsnull="false"/>
    
por Rogier Visser 03.10.2018 / 13:55

1 resposta

0

awk de aproximação para uma solução:

awk '
        {match ($0, / name="[^"]*"/)
         R1 = RSTART
         L1 = RLENGTH
         match ($0, / database_fieldname="[^"]*"/)
         R2 = RSTART
         L2 = RLENGTH
         if (substr ($0, R1+7, L1-8) == substr ($0, R2+21, L2-22)) sub (substr ($0, R2, L2), "")
        }
1
' file
<field type="float8" name="something" database_fieldname="SHORT" allowsnull="false"/>
<field type="float8" name="LONG" allowsnull="false"/>

Ele corresponde a ambos os campos de destino, extrai seus valores para comparação e, se for igual, substitui o segundo completamente pela string vazia.

    
por 03.10.2018 / 14:26

Tags