2013-04-22 140 views
2

對於簡單的問題,我很抱歉,但我似乎無法弄清楚什麼是錯的,或者在本網站或linuxforum上找到類似的問題。 (我對linux和awk都很陌生)我試圖創建一個awk文件可執行文件。我寫了腳本,並做了chmod + x文件名。下面是代碼:使awk文件可執行

#!/bin/awk -v 

'TOPNUM = $1 

## pick1 - pick one random number out of y 
## main routine 

BEGIN { 
## set seed 
     srand() 

## get a random number 

     select = 1 +int(rand() * TOPNUM) 

# print pick 
     print select 
}' 

當我嘗試並運行程序,並把一個變量的TOPNUM:

PICK1 50

我得到的迴應:

-bash:/home/petersone/bin/pick1:/ bin/awk:糟糕的解釋器:沒有這樣的文件或目錄

我確信有一些簡單的東西搞亂了,但我根本搞不清楚w它是的帽子。任何幫助表示讚賞。謝謝。

+3

awk是真的安裝到/ bin/awk嗎? – 2013-04-22 17:18:49

+2

嘗試「哪個awk」來查看akw的位置,或者將#!/ usr/bin/env awk放在頂部而不是#!/ bin/awk。如果哪個awk沒有顯示任何你需要安裝awk的東西。 – 2013-04-22 17:20:34

+0

謝謝。我會試一試。 – Eric 2013-04-22 17:22:00

回答

4

在命令行中運行以下命令:

which awk 

這將打印AWK,這很可能/usr/bin/awk的路徑。糾正第一行,你的腳本應該工作。

另外,您的腳本在開始和結束處不應該有單引號字符。您可以從命令行運行AWK並將腳本作爲帶引號的字符串傳遞,或者您可以在文件中編寫腳本並使用#!/usr/bin/awk的第一行以及文件中的命令。

此外,您的腳本的第一行不會正常工作。在AWK中,設置代碼需要位於BEGIN塊內,並且$1是對輸入行中第一個字的引用。您需要使用ARGV[1]來引用第一個參數。

http://www.gnu.org/software/gawk/manual/html_node/ARGC-and-ARGV.html

由於@TrueY指出,應該在第一行一個-f

#!/usr/bin/awk -f 

這是這裏討論:Invoking a script, which has an awk shebang, with parameters (vars)

工作,該程序的測試版本:

#!/usr/bin/awk -f 

## pick1 - pick one random number out of y 
## main routine 
BEGIN { 
    TOPNUM = ARGV[1] 

## set seed 
     srand() 

## get a random number 

     select = 1 +int(rand() * TOPNUM) 

# print pick 
     print select 
} 
+3

正常的awk應該是'#!/ usr/bin/awk -f'。 – TrueY 2013-04-22 17:57:14

1

其實這個形式更preferrable:

#! /bin/awk -E 

男子告訴:

-E以-f類似,然而,這選項是最後一個處理,應#使用!腳本,尤其是CGI應用程序,以避免從URL傳遞命令行中的選項或源代碼(!)。此選項禁用命令行變量分配