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.