如何修改AWK命令实现.desktop文件输出三列换行且无尾逗号?
可行的AWK命令修改方案
方案一:数组存储+计数器控制换行
这个方案通过数组暂存提取的字段,每收集3个字段就输出一行,自然避免尾逗号:
/^(Name|Exec|Icon)=/ { sub(/^(Name|Exec|Icon)=/, "") arr[++cnt] = $0 if (cnt == 3) { print arr[1] ", " arr[2] ", " arr[3] cnt = 0 } } END { # 处理文件中可能剩余的不足3个的字段(如果存在) if (cnt > 0) { line = arr[1] for (i=2; i<=cnt; i++) { line = line ", " arr[i] } print line } } /usr/share/applications/*.desktop
方案二:printf动态控制分隔符
利用计数器和printf直接控制输出的分隔符,写法更简洁:
/^(Name|Exec|Icon)=/ { sub(/^(Name|Exec|Icon)=/, "") printf "%s%s", $0, (++cnt % 3 ? ", " : "\n") } END { # 如果最后一组不足3个字段,补一个换行符保证格式统一 if (cnt % 3 != 0) print "" } /usr/share/applications/*.desktop
说明
- 两个方案都会先匹配
Name=/Exec=/Icon=开头的行,去掉前缀后提取内容。 - 方案一逻辑更直观,适合需要后续扩展处理字段的场景;方案二代码更紧凑,适合快速实现需求。
内容的提问来源于stack exchange,提问作者cgiannakidis
相关产品推荐
相关产品推荐

