在Applescript中写入CSV(使用终端shell)

时间:2015-11-05 12:04:36

标签: shell csv awk applescript

只是尝试写入我从对话框中选择的CSV文件。出于某种原因,这不起作用。谁能帮我吗?谢谢!

set theFile to (choose file)
do shell script "awk -F, '$1 ~ /Line 2/{$22=\"hello\"} 1'  & quoted form of POSIX path of theFile & > /tmp/a"

编辑: 我只想写一个特定行/列上的选定CSV(在本例中为第2行,第22列)。目前它没有抛出任何错误,但也没有写入所选的CSV,显示输出"" -

3 个答案:

答案 0 :(得分:1)

我认为quoted form的使用在这里是错误的。您必须中断AppleScript字符串并将其添加到字符串部分之间。试试这个:

set theFile to (choose file)
do shell script "awk -F, '$1 ~ /Line 2/{$22=\"hello\"} 1' " & quoted form of POSIX path of theFile & " > /tmp/a"

如果你的shell命令的其余部分没问题,它应该修复它......

玩得开心,迈克尔/汉堡

答案 1 :(得分:1)

您的命令将 awk 命令的输出写入名为" a "的文件中。在" tmp "文件夹(此文件夹已隐藏),因此do shell script的输出为""

您的命令编辑第一个字段的内容等于" 第2行"

的行
  • 要编辑第二行,请使用NR==2

    要修改第1行到第5行,请使用NR<6

    要修改第10行到第15行,请使用NR>9 && NR<16

OS X 上的标准 awk 无法编辑文件,因此您必须将输出写入临时文件并使用mv命令覆盖原始文件,但它可能与 GNU awk 4.1.0 ... - &gt; gawk -i inplace

要编辑某个文件的第二行(以CSV文件结尾的行必须是换行符),请使用:

set theFile to quoted form of POSIX path of (choose file)
set tempFile to theFile & ".tmp123"
do shell script "awk -F, 'NR==2{$22=\"hello\";}1' OFS=, " & theFile & " >" & tempFile & "&& mv -f " & tempFile & " " & theFile

如果以CSV文件结尾的行是回车符,请使用:

do shell script "awk -F, 'NR==2{$22=\"hello\";}1' RS='\\r' ORS='\\r' OFS=, " & theFile & " >" & tempFile & "&& mv -f " & tempFile & " " & theFile

<强>更新

以下是如何将AppleScript变量( m )放入命令的示例。

set m to 6 -- a number
do shell script "awk -F, 'NR<" & m & "{$22=\"hello\";}1' RS='\\r' ORS='\\r' OFS=, " & theFile & " >" & tempFile & "&& mv -f " & tempFile & " " & theFile

答案 2 :(得分:0)

如果您的主要目的是运行bash + awk脚本,那么您可以采取相反的方式......

不是从Applescript开始并尝试运行shell和awk,而是可以在shell中启动并调用Applescript来选择文件,然后在shell中继续并运行awk

像这样:

#!/bin/bash
file=$( osascript -e 'set theFile to (POSIX path of (choose file))' )
awk '1' "$file"

因此,您将获得一个调用Applescript的bash脚本,而不是一个调用bash的Applescript。

请注意,1awk脚本中是正确的,因此awk只会执行默认操作,即打印当前行 - 显然您会自己放置awk那里有1}个命令。