2015-10-20 205 views
-1

目前我有在我打電話AWK像從shell腳本執行awk腳本生成語法錯誤

/usr/bin/nawk -f rst.awk file1 file2 

和rst.awk腳本看起來像

cat rst.awk 
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] } 
NR==FNR { prev[$1] = curr; next } 
($1 in prev) && (curr > prev[$1]) 
在這種情況下

我需要確保每次運行腳本時都檢查rst.awk是否具有以上內容。

我們可以在腳本本身編寫rst.awk內容嗎? 自己嘗試過,但沒有運氣。

cat te.sh 
/usr/bin/nawk -f 
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] } 
NR==FNR { prev[$1] = curr; next } 
($1 in prev) && (curr > prev[$1]) 
file1 file2 



./te.sh 
/usr/bin/nawk: no program filename 
./te.sh: line 2: syntax error near unexpected token `$2,a,/\./' 
./te.sh: line 2: `{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3]}' 
+0

你試過了什麼?因爲我認爲這應該工作。 –

+0

更新帖子。不要使用評論。看起來你只是忘記引用你的awk腳本參數。 –

+0

你是什麼意思,rst.awk的內容不保證不變? (使文件及其目錄不可寫入非常容易,從而「鎖定」文件內容。) –

回答

4

您需要te.sh包含以下任一:

#!/usr/bin/nawk -f 
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] } 
NR==FNR { prev[$1] = curr; next } 
($1 in prev) && (curr > prev[$1]) 

/usr/bin/nawk ' 
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] } 
NR==FNR { prev[$1] = curr; next } 
($1 in prev) && (curr > prev[$1]) 
' "[email protected]" 

我強烈推薦後者。無論哪種方式,你會執行它作爲te.sh file1 file2

btw「Awk需要幫助」只是您可以選擇的最差的主題行,並沒有比「恐龍聞起來有趣」更好,或者在將來尋找類似問題的答案時也沒有什麼用處。選擇捕捉問題的主題行,例如「從shell腳本執行awk腳本會產生語法錯誤」。

+1

謝謝:) :) – rKSH

+1

歡迎您考慮編輯您的問題以提供有用的相關主題行,以便人們將來查找檔案的類似問題有可能找到這個Q/A。 –

+1

對於獨立的事物,我的強烈偏好是shebang,所以我有更大的自由來使用劇本中我想要的任何引號。爲什麼強烈建議使用引用的腳本而不是shebang?也許如果人們習慣了這種方法,當他們嘗試將awk集成到更大的shell腳本時,他們會遇到更少的問題? – ghoti