tengo un camino:
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/mcc_oriii_after_centering.pdb
Quiero tener:
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/
Lo que he probado:
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}'
Pero lo que obtengo es:
mcc_oriii_after_centering.pdb
Respuesta1
Puede establecer el valor $NF
en la cadena vacía:
$ 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}
establece el separador de campo de salida para que sea el mismo que el separador de campo de entrada antes del inicio del procesamiento; de lo contrario, la salida se separará mediante espacios predeterminados en lugar de barras.
Al menos en GNU awk, podrías eliminar el último campo por completo disminuyéndolo NF
(aunque esto dará un resultado sin la barra diagonal final):
awk -F'/' 'BEGIN{OFS=FS} {NF--; print}'
También puedes usar la expansión de parámetros de shell para evitar awk por completo:
$ echo "${a%/*}/"
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/
${parameter%pattern}
devuelve el valor de la variable de shell parameter
con la coincidencia final más corta de pattern
eliminada; consulte, por ejemploBashGuide: Expansión de parámetros
O simplemente use el dirname
comando.