如何使用awk提取txt文件每个段落中以-分隔的编程语言名称
解决方案
你遇到的问题核心有两点:
- 按行处理时,折行的条目会被拆成多条处理,产生多余输出
- 早期段落模式的用法只取第一个字段,没有匹配正确的名称分隔规则
正确实现代码
直接运行以下gawk命令即可:
gawk ' BEGIN { RS = "" # 启用段落模式,以空行作为不同条目的分隔符 } { # 匹配当前条目开头到第一个 " - " 之间的内容作为语言名称 if (match($0, /^(.+?) +- /, res)) { # 去除名称首尾的空白字符后输出 gsub(/^\s+|\s+$/, "", res[1]) print res[1] } } ' language.TXT
如果需要单行版本:
gawk -v RS='' 'match($0, /^(.+?) +- /, r) {gsub(/^\s+|\s+$/, "", r[1]); print r[1]}' language.TXT
效果说明
针对你给出的示例输入,上述命令会直接输出:
P+ P4 PABC
完全符合提取语言名称的需求,哪怕语言名称包含多个空格分隔的单词,只要名称后跟着-的分隔规则,都可以正确提取。
内容的提问来源于stack exchange,提问作者Jesús Santoyo
相关产品推荐
相关产品推荐

