Wie lösche/ersetze ich alles in einer Spalte, nachdem ein bestimmtes Zeichen mit awk abgerufen wurde?

Wie lösche/ersetze ich alles in einer Spalte, nachdem ein bestimmtes Zeichen mit awk abgerufen wurde?

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 subden 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.

verwandte Informationen