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

您也可以使用 shell 參數擴充來完全避免 awk:

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

${parameter%pattern}傳回 shell 變數的值parameter,其中最短尾隨匹配pattern已刪除 - 請參閱範例BashGuide:參數擴展

或直接使用dirname命令。

相關內容