AWK: 마지막 패턴을 삭제하는 방법은 무엇입니까?

AWK: 마지막 패턴을 삭제하는 방법은 무엇입니까?

나는 경로가 있습니다 :

/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/mcc_oriii_after_centering.pdb

가지고 싶다:

/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/

내가 시도한 것:

a="/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/mcc_oriii_after_centering.pdb"
echo $a | awk -F'/' '{print $NF}'

그러나 내가 얻는 것은 다음과 같습니다.

mcc_oriii_after_centering.pdb

답변1

값을 $NF빈 문자열로 설정할 수 있습니다.

$ echo "$a" | awk -F'/' 'BEGIN{OFS=FS} {$NF=""; print}'
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/

BEGIN{OFS=FS}처리 시작 전에 출력 필드 구분 기호를 입력 필드 구분 기호와 동일하게 설정합니다. 그렇지 않으면 출력이 슬래시 대신 기본 공백으로 구분됩니다.

적어도 GNU awk에서는 감소하여 마지막 필드를 모두 삭제할 수 있습니다 NF(이렇게 하면 후행 슬래시 없이 출력이 제공되지만).

awk -F'/' 'BEGIN{OFS=FS} {NF--; print}'

awk를 완전히 피하기 위해 쉘 매개변수 확장을 사용할 수도 있습니다.

$ echo "${a%/*}/"
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/

${parameter%pattern}parameter가장 짧은 후행 일치가 있는 쉘 변수의 값을 반환합니다.pattern . 예를 참조하세요.BashGuide: 매개변수 확장

아니면 단순히 dirname명령을 사용하십시오.

관련 정보