Ich habe eine Datei mit tabulatorgetrennten Feldern (oder Spalten) wie die folgende:
cat abc_table.txt
a b c
1 11;qqw 213
2 22 222
3 333;rs2 83838
Ich möchte alles nach dem ";" nur auf dem zweiten Feld.
Ich habe es mit versucht
awk 'BEGIN{FS=OFS="\t"} NR>=1 && sub (/;[*]/,"",$2){print $0}' abc_table.txt
aber es scheint nicht zu funktionieren. Ich habe es auch mit sed versucht:
's/;.*//g' abc_table.txt
es löscht aber auch die Zeichenketten im dritten Feld:
a b c
1 11
2 22 222
3 333
Die gewünschte Ausgabe ist:
a b c
1 11 213
2 22 222
3 333 83838
Wenn mir jemand helfen könnte, wäre ich sehr dankbar!
Sie müssen einfach Ihre Regex korrigieren.
awk '{sub(/;.*/,"",$2)} 1' Input_file
Wenn Sie Input_file TAB getrennt haben, versuchen Sie Folgendes:
awk 'BEGIN{FS=OFS="\t"} {sub(/;.*/,"",$2)} 1' Input_file
Problem in der Regex von OP : Die Regex von OP;[*]
sucht;
und*
(wörtliches Zeichen) im 2. Feld, weshalb es NICHT möglich ist, alles nach dem;
2. Feldzu ersetzen. Wir müssen einfach geben,;.*
was bedeutet, dasswirvom ersten;
bis zum letzten des 2. Feldesalleserfassen und dann im 2. Feld durch NULL ersetzen.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen