只是尝试写入我从对话框中选择的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,显示输出"" -
答案 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
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。
请注意,1
在awk
脚本中是正确的,因此awk
只会执行默认操作,即打印当前行 - 显然您会自己放置awk
那里有1}个命令。