2015-11-05 55 views
2

試圖寫入從對話框中選擇的CSV文件。出於某種原因,這是行不通的。誰能幫我嗎?謝謝!在Applescript中使用CSV寫入(使用終端shell)

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

什麼是期望的行爲和發生了什麼問題? –

+0

我只想寫一個特定的行/列(在這種情況下,第2行,第22列)選定的CSV。目前它不會拋出任何錯誤,但不會寫入選定的CSV文件,顯示輸出「」 – Will

+0

請編輯問題以包含此內容。謝謝! –

回答

1

你的命令寫AWK的輸出命令到一個文件名爲「一個」中的「TMP」文件夾(這個文件夾是隱藏的),所以do shell script的輸出爲「」

您的命令編輯第一個字段的內容等於「第2行」的行。

  • 要編輯的第二行中,使用NR==2

    要通過5編輯線1,使用NR<6

    要10至15行編輯,使用NR>9 && NR<16

標準awk on OS X無法編輯文件的地方,所以你必須寫輸出到一個臨時文件,並使用mv命令覆蓋原來的文件,但它與GNU AWK 4.1.0 ...可能 - >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變量()到命令。

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 
+0

非常感謝,回車完美地工作 – Will

+0

最後一件事,是否可以做NR Will

+0

我更新了我的答案 – jackjr300

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命令的其餘部分都很好,它應該修復它...

玩得開心,邁克爾/漢堡

+0

感謝您的幫助,但它仍然無法正常工作。它不會拋出任何錯誤,但不會寫入CSV。只想寫在所選特定文件的第2行第22列。 – Will

+0

這可能是一個awk問題,我不太熟悉。但引用形式的答案也有幫助:) – ShooTerKo

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" 

所以,你會得到一個bash腳本調用AppleScript的,而不是一個AppleScript調用bash

注意1處於awk腳本只是真實的,所以awk將只是其默認的事情,這是打印當前行 - 很顯然,你會把自己的awk命令在那裏。

+0

對不起,也許我不清楚,這是一個更長的腳本的功能,但我相信這會'我也工作過:) – Will