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команду.

Связанный контент