![Wie lösche/ersetze ich alles in einer Spalte, nachdem ein bestimmtes Zeichen mit awk abgerufen wurde?](https://rvso.com/image/97211/Wie%20l%C3%B6sche%2Fersetze%20ich%20alles%20in%20einer%20Spalte%2C%20nachdem%20ein%20bestimmtes%20Zeichen%20mit%20awk%20abgerufen%20wurde%3F.png)
Beispiel für file.txt:
/map/1.0.0/cd/base/4/23/82.png 200
/map/1.0.0/cd/base/2/48/154.png?fefsfes 200
/map/1.0.0/cd/base/3/45/433.png?gtdrdrg 200
Ich muss das hier löschen:
.png
.png?fefsfes
.png?gtdrdrg
ich benutze das
$ cat file.txt | awk '{ print $1","$2}'
um das Ergebnis zu erhalten:
/map/1.0.0/cd/base/4/23/82.png,200
/map/1.0.0/cd/base/2/48/154.png?fefsfes,200
/map/1.0.0/cd/base/3/45/433.png?gtdrdrg,200
Kann ich die Spalte irgendwie abrufen awk '{ print $1}'
und alles nach der letzten Zahl löschen?
Gewünschtes Ergebnis:
/map/1.0.0/cd/base/4/23/82,200
/map/1.0.0/cd/base/2/48/154,200
/map/1.0.0/cd/base/3/45/433,200
Antwort1
Wenn Sie das Wesentliche Ihres awk-Befehls beibehalten möchten, können Sie einfach sub
den unerwünschten nachfolgenden Teil entfernen.$1
awk '{sub(/\.png.*$/,"",$1); print $1","$2}' file
oder (vielleicht etwas ungeschickter)
awk '{sub(/\.png.*$/,"",$1)}1' OFS=, file
Antwort2
Sie können die folgende Awk-Lösung ausprobieren -
awk 'BEGIN{FS=".png| "} {print $1,$NF}' kk.txt |tr ' ' ','
Verwenden Sie dabei einen Trenner für mehrere Felder.