У меня есть путь:
/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
команду.