PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : awk: zwischen Zeile 802 und 968 nach dem 38 Komma, eine 1 zu 0 machen



Gutschy
05-11-2011, 21:49
.......... :)

DieterH
09-11-2011, 13:41
Hallo Gutschy,

Unter den nachstehend genannten Randbedingungen sollte das awk-Skript der Grundstock einer Lösung sein:
1. Das Feldtrennzeichen ist das Komma --->daher Option -F","
2. Zwischen Zeilen 802 und 968 jeweils EINSCHLIESSLICH; ansonsten ">" anstatt ">=" usw.
3. Das 38. Feld besteht entweder nur aus einer "0" oder einer "1". Ist keine "1" vorhanden, dann Feld 38 so belassen, ansonsten seinen Wert unverändert lassen.
4. Änderung wirkt auf ALLE Zeilen im angegebenen Bereich.

awk -F"," \
'{
if ((NR >= 802) && (NR <= 968)) {
if ($38 == "1") {
Feld38 = "0";

# Zusammenfassen der Felder 1 - 37 für Ausdruck
str_Teil1 = $1;
for(i=2;i<=37;i++) str_Teil1 = sprintf("%s,%s",str_Teil1,$i);

# Zusammenfassen der Felder ab Feld 38 aufwärts für Ausdruck
str_Teil2 = $39;
for(i=40;i<=NF;i++) str_Teil2 = sprintf("%s,%s",str_Teil2,$i);

# Ausdruck der geänderten Zeile:
printf("%s,%s,%s\n",str_Teil1,Feld38,str_Teil2);
} else
printf("%s\n",$0);
} else
printf("%s\n",$0);
}
}' < eingabe-datei > ausgabe-datei


HINWEIS:
Führende Leerzeichen zum Einrücken zwecks besserer Lesbarkeit wurden vom MRUNIX-System entfernt.

Gutschy
16-11-2011, 18:59
.......... :)

Gutschy
16-11-2011, 19:55
.......... :)

Gutschy
16-11-2011, 21:38
.......... :)