![awk で特定の文字を取得した後の列内のすべてを削除/置換するにはどうすればよいですか?](https://rvso.com/image/97211/awk%20%E3%81%A7%E7%89%B9%E5%AE%9A%E3%81%AE%E6%96%87%E5%AD%97%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E5%BE%8C%E3%81%AE%E5%88%97%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%82%92%E5%89%8A%E9%99%A4%2F%E7%BD%AE%E6%8F%9B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
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 ' ' ','
複数のフィールド区切り文字を使用します。