shell - awk FPAT 在 AppleScript do shell 脚本中不起作用吗?
问题描述
我有一个 awk 命令,它使用 FPAT 来忽略 CSV 记录中的逗号(请参阅此问题)。此命令在终端(默认 zsh shell)中工作:
awk -v FPAT='"[^"]*"|[^,]+' 'NF==6 {split($NF, a, /\. # /)} NR!=1&&NF<=6 {print a[5],$5,$3,$4} ' input.txt
样本记录:
http://publications.europa.eu/resource/cellar/3befa3c3-a9af-4dac-baa2-92e95cb6e3ab,http://publications.europa.eu/resource/cellar/3befa3c3-a9af-4dac-baa2-92e95cb6e3ab.0002,ECLI:EU:C:1985:443,61984CJ0239,Gerlach,"Judgment of the Court (Third Chamber) of 24 October 1985. # Gerlach & Co. BV, Internationale Expeditie, v Minister van Economische Zaken. # Reference for a preliminary ruling: College van Beroep voor het Bedrijfsleven - Netherlands. # Article 41 ECSC - Anti-dumping duties. # Case 239/84."
但是,它在我的 AppleScript 中不起作用,我像这样输入它(带有转义)。
set r1 to do shell script "awk -v FPAT='\"[^\"]*\"|[^,]+' '{print a[5],$5,$3,$4
}' <<<" & quoted form of theInput
使用此命令,awk 仍将空格视为字段分隔符。换句话说,它似乎FPAT
完全忽略了。print
当用简单的.替换语句时,这一点非常清楚print $1
。
我已经使用 sh shell(do shell script 命令默认使用)在终端中测试了该命令,并且这仍然可以完美运行,因此这似乎不是问题。
可以是awk版本吗?当我在命令行中执行以下操作时,awk -W version
输出为:GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
解决方案
我不确定,但问题可能是当您在 AppleScript 中运行 shell 脚本时,它不知道在哪里awk
。(AppleScript 中的 shell 环境与用户的不同。)
在 AppleScript 中试试这个单行:
do shell script "awk -W version"
如果没有返回任何内容,请返回您的终端并输入which awk
. 对我来说,这返回了:/usr/local/bin/awk
返回 AppleScript:
do shell script "/usr/local/bin/awk -W version"
返回完整的版本信息。
所以,我的论点是使用 awk 的完整路径可以解决你的问题。
推荐阅读
- python - Spyder中的Ipython控制台不使用环境定义的Python版本
- c - 在 C 中测量经过的时间?
- javascript - 如何避免“无效的配置对象。Webpack 已使用与 API 模式不匹配的配置对象进行初始化。”
- r - R:列表到数据框映射功能
- java - 即使指定的模式是点,DecimalFormat 也使用逗号分隔符
- javascript - 如何使用 Angular 9 将多个图像文件和 PDF 文件合并为单个 PDF
- qt - 一次取消选中/选中所有复选框
- java - 如何在 Java 中制作 Material Exposed Drop Down List 必填字段
- salesforce - 内部查询的 SOQL 记录数
- azure - 如何将资源组从禁用的订阅迁移到 Azure 中的工作目录