¿Cómo eliminar/reemplazar todo en la columna después de que se haya obtenido cierto carácter con awk?

¿Cómo eliminar/reemplazar todo en la columna después de que se haya obtenido cierto carácter con awk?

Ejemplo de archivo.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

Necesito eliminar esto:

.png
.png?fefsfes
.png?gtdrdrg

yo uso esto

$ cat file.txt | awk '{ print $1","$2}'

para obtener resultado:

/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

¿Puedo de alguna manera recuperar la columna awk '{ print $1}'y eliminar todo lo que está después del último número?

Resultado deseado:

/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

Respuesta1

Si desea preservar la esencia de su comando awk, simplemente puede subeliminar la parte final no deseada de$1

awk '{sub(/\.png.*$/,"",$1); print $1","$2}' file

o (quizás más torpemente)

awk '{sub(/\.png.*$/,"",$1)}1' OFS=, file

Respuesta2

Puedes probar la siguiente solución awk:

awk 'BEGIN{FS=".png| "} {print $1,$NF}' kk.txt |tr ' ' ','

usando separador de campo múltiple.

información relacionada