Eine Aufgabe für AWK

D

deepthrow

Grünschnabel
Hallo alle zusammen!

ich hab folgendes Problem. Ich habe eine Datei mit mehreren Spalten und in der zweiten Spalte befinden Zahlen. Diese Zahlen sind in verschiedenen Zeilen auch mal gleich. Das ganze sieht ungefähr so aus.

wort-test 1
wort-test 1
wort-test 12
wort-test 12
wort-test 12
wort-test 30
wort-test 30

Jetzt möchte ich gerne, das zwischen jeder Zeile, wo sie die Zahlen der zweiten Spalte ändern eine Leerzeile eingefügt wird. Also hier eine Leerzeile zwischen 1,12,30, sprich 3 Stück.

Würde mich freuen wenn mir da jemand helfen könnte.
 
awk '{ if (c2!=$2 && NR>1) print ""; print $0; c2=$2}'

gruss,
Stephan
 
vielen dank!! ich hab es gerade in meine pipe kette eingefügt und es funktioniert wunderbar. jetzt werde ich mir noch was dazu überlegen
 
bitte, war mit ein vergnügen, endlich darf ich auch mal helfen...
 
Wenn Du willst kannst Du mir einen Gefallen tun und die Zeile erläutern.

Mich interessiert die Wirkungsweise, doch ich habe noch nie was mit awk gemacht und steige nicht ganz dahinter.
Danke und tschüss.
 
nur der awk teil in den {} :
Code:
 if (     c2      !=          $2         && NR>1)               print ""     ;          print $0          ; c2=$2}
wenn   c2      ungleich  Spalte2         und  Wert>1)  dann leerzeile    sonst    zeile ausgeben ;        nun wert in Spalte 2 in der Variablen c2 merken
 
Zuletzt bearbeitet:
Das mit dem "sonst" stimmt so nicht. Steht ja nirgendwo ein "else". Das einzige vom if-Statement beeinflusste Kommando ist das 'print ""'. Die Variable NR enthält die jeweilige aktuelle Zeilennummer. (Number of record oder so.)
 

Ähnliche Themen

Zeilen behalten, die Werte in einem bestimmten Bereich enthalten

Spalten einer Datei in neue Datei integrieren.

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Keine grafische Oberfläche (Debian Installation)

CSV Datei mit sed manipulieren/optimieren/ergänzen

Zurück
Oben