Linux下可运行的mawk脚本在Windows PowerShell执行结果异常如何解决
问题原因
PowerShell和类Unix shell的解析规则不同:你写的单引号包裹的awk脚本中,$开头的内容会被PowerShell识别为自身变量提前展开,最终传递给mawk的脚本丢失了$16、$4这类字段标识,导致执行结果不符合预期。
解决方案
方案1:使用PowerShell的
--%停止解析符(适用于PowerShell 3.0及以上版本,操作最简便)
命令写法如下:mawk -F, --% '$16 == "Good" {print $4}' *GOL*_approval.txt--%会告诉PowerShell后续内容不做任何变量解析、转义处理,直接原封不动传递给mawk程序。方案2:转义脚本内的特殊字符
外层用双引号包裹awk脚本,对内部的$和双引号用PowerShell的转义符反引号(`)转义:mawk -F, "`$16 == `"Good`" {print `$4}" *GOL*_approval.txt方案3:把awk脚本存入独立文件(完全规避转义问题,通用性最强)
新建纯文本文件extract.awk,内容为:$16 == "Good" {print $4}执行时指定加载脚本文件即可:
mawk -F, -f extract.awk *GOL*_approval.txt
内容的提问来源于stack exchange,提问作者Sam Alleman
相关产品推荐
相关产品推荐

