我有一条路径:
/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}
parameter
返回具有最短尾随匹配的shell 变量的值pattern
- 例如参见BashGuide:参数扩展
或者直接使用dirname
命令。