awk FPAT 在 AppleScript do shell 脚本中不起作用吗?

Does awk FPAT not work within AppleScript do shell script?

我有一个使用 FPAT 忽略 CSV 记录中的逗号的 awk 命令(参见 )。此命令在终端中有效(默认 zsh shell):

awk -v FPAT='"[^"]*"|[^,]+' 'NF==6 {split($NF, a, /\. # /)} NR!=1&&NF<=6 {print a[5],,,} ' 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],,,
}' <<<" & quoted form of theInput

使用此命令,awk 仍将 space 视为字段分隔符。换句话说,它似乎完全忽略了 FPAT 。当用简单的 print .

替换 print 语句时,这一点非常清楚

我已经在终端中使用 sh shell(do shell 脚本命令默认使用)测试了该命令,它仍然可以正常工作,所以这似乎不是问题所在.

莫非是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"

如果 returns 什么都没有,请返回您的终端并输入 which awk。对我来说,这返回了:/usr/local/bin/awk

返回 AppleScript:

do shell script "/usr/local/bin/awk -W version"返回完整版本信息。

因此,我的论点是使用 awk 的完整路径 可能 解决您的问题。