csv - 用于选择整个记录的 awk 命令在终端中有效,但在 Applescript 中无效
问题描述
我正在尝试在 AppleScript 中解析 SPARQL 查询 (CSV) 的结果。输入看起来像这样,每条记录都在一个新行上。我只想完整地挑出记录(以便用户可以从列表中选择它们)。
"work","expression","ecli","celex","alttitle"
"http://publications.europa.eu/resource/cellar/85dd7fdf-45b0-4962-8c25-f3010212b52b","http://publications.europa.eu/resource/cellar/85dd7fdf-45b0-4962-8c25-f3010212b52b.0002","ECLI:EU:C:2007:153","62006CJ0044","Gerlach"
"http://publications.europa.eu/resource/cellar/0b70a7ef-fa45-4bbe-b76e-25d1fad10d29","http://publications.europa.eu/resource/cellar/0b70a7ef-fa45-4bbe-b76e-25d1fad10d29.0002","ECLI:EU:C:1984:63","61983CJ0046","Gerlach"
以下awk
命令的输出在 AppleScript 中为空(注意转义的双引号)
do shell script "awk 'BEGIN {RS = \"\"} { print $2 }'<<<" & quoted form of theInput
但是当我在终端(zsh shell)中做同样的事情时,就像这样
awk 'BEGIN {RS = ""} { print $2 }' input.txt
正如预期的那样,我确实获得了第一条记录。
解决方案
awk 中的默认记录分隔符 (RS) 是\n
. 将 RS 设置为空字符串有一个特殊的值,意味着记录由空行分隔。
要确定在输出的 SPARQL 查询结果中使用了哪种类型的换行符curl
,请保存输出并使用vim -b output.txt
and do打开它:set list
。表示 CR (macOS) ,^M
$ 通常表示 LF (Linux)。请注意,使用-o
in 标志curl
保存输出可能会导致使用不同类型的换行符,而不是简单地使用echo & theVariable & > $HOME'/Desktop/output.txt'
.
另请注意, a\n
通常添加在文件的最后(例如 by vim
)。如果其他记录以 结尾,\r
但最后一个以 结尾\n
,则可以设置RS
为"[\r\n]"
,这是\r
or的正则表达式模式\n
。在 Applescript 中,转义特殊字符,这变成:
RS=\"[\\r\\n]\"
推荐阅读
- javascript - 是否可以获得放置在背景图像顶部的 div 背后的颜色?
- css - CSS中有类似“背景变换”的东西吗?或某种方式来转换同一图像/视频/iframe/等的不同区域。独立?
- javascript - 如果内容日期是今天,如何添加课程?
- c++ - 可变参数模板类迭代类型
- c++ - 我试图找出嵌套 for 循环的运行时复杂度
- bulma - 布尔玛导航栏汉堡菜单不展开
- html - HTML/CSS YES/NO 滑块在选择是时显示更多字段
- javascript - JavaScript 跳过 document.write 去 window.prompt?
- java - 休眠:orphanRemoval 不适用于克隆对象
- vba - 在 MS Access 中使用 recordset.findfirst 进行记录搜索会引发错误 3070