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 ' ' ','

다중 필드 구분자를 사용합니다.

관련 정보