awk で特定の文字を取得した後の列内のすべてを削除/置換するにはどうすればよいですか?

awk で特定の文字を取得した後の列内のすべてを削除/置換するにはどうすればよいですか?

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

これを削除する必要があります:

.png
.png?fefsfes
.png?gtdrdrg

私はこれを使う

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

結果を得るには:

/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

何らかの方法で列を取得してawk '{ print $1}'、最後の数字以降のすべてを削除することはできますか?

望ましい結果:

/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

答え1

awkコマンドの本質を保ちたい場合は、単にsub不要な末尾の部分を削除すればいい。$1

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

または(おそらくもっとぎこちなく)

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

答え2

以下のawkソリューションを試すことができます -

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

複数のフィールド区切り文字を使用します。

関連情報