首页 > 解决方案 > 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)

标签: shellawkescapingapplescript

解决方案


我不确定,但问题可能是当您在 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 的完整路径可以解决你的问题。


推荐阅读