首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWK:如何删除最后的模式?

AWK:如何删除最后的模式?
EN

Ask Ubuntu用户
提问于 2020-09-11 18:17:03
回答 1查看 1.2K关注 0票数 0

我有一条路:

代码语言:javascript
复制
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/mcc_oriii_after_centering.pdb

我想要:

代码语言:javascript
复制
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/

我试过的是:

代码语言:javascript
复制
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}'

但是,我得到的是:

代码语言:javascript
复制
mcc_oriii_after_centering.pdb
EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2020-09-11 18:22:54

可以将值$NF设置为空字符串:

代码语言:javascript
复制
$ 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中,您可以通过减少NF来完全删除最后一个字段(尽管这将给出一个输出而没有尾随斜杠):

代码语言:javascript
复制
awk -F'/' 'BEGIN{OFS=FS} {NF--; print}'

您还可以使用shell参数展开来完全避免awk:

代码语言:javascript
复制
$ echo "${a%/*}/"
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/

${parameter%pattern}返回shell变量parameter的值,其中删除了pattern的最短尾随匹配-例如,参见指南:参数展开

或者简单地使用dirname命令。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1274423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档