
Hier ist die Datei, mit der ich mich befassen muss.
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;
Ich muss das Feld 7 jeder Zeile ersetzen. Wenn der Wert ist 00
, muss ich ihn auf setzen 01
. Aber nur für Zeilen, deren erstes Feld istENR1!
awk -F';' -v OFS=';' 'NR>=1{sub("00","01",$7)}1' file > result
Dies funktioniert, aber ersetzen Sie auch das Feld $7 durch Zeilen, die mit ENR6 beginnen.
Wie füge ich die Bedingung hinzu (nur Zeilen, die mit ENR1 beginnen?)
Antwort1
ich würde versuchen
awk -F';' -v OFS=';' '$7 == "00" && $1 == "ENR1" { $7 = "01" } {print} ' file > result
Wo
$7 == "00" && $1 == "ENR1" { $7 = "01" }
gilt nur für Zeilen, die mit beginnenENR1
, wobei das siebte Feld gleich ist00
$7 = "01"
setze 7. Feld auf 01{ print }
Drucken Sie jede Zeile, einschließlich ENR1s nach der Änderung.Möglicherweise möchten Sie den Test fortsetzen,
NR>=1
wenn die echte Datei einen einzeiligen Header hat.
Antwort2
KurzsedAnsatz:
sed -E 's/^(ENR1;([^;]+;){5})00;/\101;/' file
Die Ausgabe:
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;
- erfasst Zeilen beginnend mitENR1
gefolgt von 5 Feldern([^;]+;){5}
und dem 7. Feld00;