
Aquí está el archivo que necesito tratar.
ENR1;203023;0000;H606626;001505;EL;00;1234;0000100;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201443;000000000;000000000;000000000;000000000;
ENR1;203357;0000;H606626;001653;EL;01;2546;0000800;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201503;000000000;000000000;000000000;000000000;
ENR6;001811;150316;000;00;201624;000000000;000000000;000000000;000000000;
ENR1;203385;0000;H606625;000615;EL;00;5861;0000100;00;00;201346100;H6022418;
Debo sustituir el campo 7 de cada línea. Si el valor es 00
, entonces debo establecerlo en 01
. Pero sólo para líneas cuyo primer campo esENR1!
awk -F';' -v OFS=';' 'NR>=1{sub("00","01",$7)}1' file > result
Esto funciona pero también reemplaza el campo $7 con líneas que comienzan con ENR6.
¿Cómo agregar la condición (¿solo líneas que comienzan con ENR1?)
Respuesta1
lo intentaré
awk -F';' -v OFS=';' '$7 == "00" && $1 == "ENR1" { $7 = "01" } {print} ' file > result
dónde
$7 == "00" && $1 == "ENR1" { $7 = "01" }
solo se aplica a la línea que comienza conENR1
, teniendo el séptimo campo igual a00
$7 = "01"
establezca el séptimo campo en 01{ print }
Imprima cada línea, incluida la de ENR1 después del cambio.es posible que desee realizar
NR>=1
la prueba si el archivo real tiene un encabezado de una línea.
Respuesta2
Cortosedacercarse:
sed -E 's/^(ENR1;([^;]+;){5})00;/\101;/' file
La salida:
ENR1;203023;0000;H606626;001505;EL;01;1234;0000100;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201443;000000000;000000000;000000000;000000000;
ENR1;203357;0000;H606626;001653;EL;01;2546;0000800;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201503;000000000;000000000;000000000;000000000;
ENR6;001811;150316;000;00;201624;000000000;000000000;000000000;000000000;
ENR1;203385;0000;H606625;000615;EL;01;5861;0000100;00;00;201346100;H6022418;
^(ENR1;([^;]+;){5})00;
- captura líneas que comienzan conENR1
seguidas de 5 campos([^;]+;){5}
y el séptimo campo00;