Eu tenho um caminho:
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/mcc_oriii_after_centering.pdb
Eu quero ter:
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/
O que eu tentei:
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}'
Mas o que eu recebo é:
mcc_oriii_after_centering.pdb
Responder1
Você pode definir o valor $NF
para a string vazia:
$ 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}
define o separador do campo de saída para ser igual ao separador do campo de entrada antes do início do processamento - caso contrário, a saída será separada pelos espaços padrão em vez de barras.
Pelo menos no GNU awk, você pode excluir completamente o último campo diminuindo NF
(embora isso forneça uma saída sem a barra final):
awk -F'/' 'BEGIN{OFS=FS} {NF--; print}'
Você também pode usar a expansão de parâmetros do shell para evitar completamente o awk:
$ echo "${a%/*}/"
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/
${parameter%pattern}
retorna o valor da variável shell parameter
com a menor correspondência final pattern
removida - veja por exemploBashGuide: Expansão de parâmetros
Ou simplesmente use o dirname
comando.