
Ich habe eine Datei, die Zeilen mit verschiedenen alphanumerischen Zeichenfolgen enthält, die mit Leerzeichen-Bindestrich-Leerzeichen getrennt sind. Es gibt jedoch Zeilen, in denen nur ein alphanumerischer Wert und ein Trennzeichen vorhanden sind, der andere Zeichenfolgenwert jedoch fehlt. Beispiel:
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
DK0060056323-DKK -
DK0060186294-DKK -
In den letzten beiden Zeilen im obigen Beispiel fehlt auf der rechten Seite des Trennzeichens eine alphanumerische Zeichenfolge, und ich möchte sie entfernen. Ich habe versucht, den folgenden awk-Ausdruck zu verwenden:
awk '!/* - /' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt
Damit !/* - /
meine ich „Suchen Sie nach einem Muster, bei dem nach jedem Zeichen (*) ein Leerzeichen-Bindestrich-Leerzeichen (-) und danach nichts folgt, und wenn kein solches Muster gefunden wird (!)“, verschieben Sie dann die restlichen Zeilen in die Datei temp.txt und ersetzen Sie den Inhalt von sourcefile.txt durch den Inhalt von temp.txt. Wenn ich jedoch das obige awk-Skript ausführe, passiert weder mit dem Inhalt von sourcefile.txt noch mit dem Inhalt von sourcefile.txt etwas – alles bleibt gleich. Ich erhalte auch keine Fehlermeldung. Was könnte hier falsch sein? Angesichts der obigen Beispielzeilen sollte die gewünschte Ausgabe nach dem Ausführen des awk-Skripts folgendermaßen aussehen:
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
Antwort1
Um Zeilen zu drucken, die mit einem alphanumerischen Zeichen enden, gehen Sie einfach wie folgt vor:
$ awk '/[[:alnum:]]$/' file
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
Antwort2
Noch einfacher:
awk '$3' inputfile
Dies ist eine Abkürzung für awk '$3!=""'
, was eine Abkürzung für ist awk '$3!=""{print}'
, was eine Abkürzung für istawk '$3!=""{print $0}'
Fürs Protokoll:
sed /-$/d
ist wahrscheinlich schneller und grep -ve '-$'
sogar noch schneller.
Antwort3
Dank des Vorschlags von @guillermo chamorro konnte ich das gewünschte Ergebnis erzielen, indem ich mein Skript folgendermaßen änderte:
awk '!/^.* -$/' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt
Danke, Guillermo.