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 的完整路径 可能 解决您的问题。
我有一个使用 FPAT 忽略 CSV 记录中的逗号的 awk 命令(参见
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 的完整路径 可能 解决您的问题。