2013-11-23 45 views
3

我的計算機上有一個目錄,其中包含我在網上找到的用於研究的整個數據庫。這個數據庫包含成千上萬的文件,所以爲了做我所需要的,我一直在研究文件I/O的東西。程序員朋友建議使用bash/awk。我寫了我的代碼:使用awk處理數據庫

#!/usr/bin/env awk 
    ls -l|awk' 
    BEGIN {print "Now running"} 
    {if(NR == 17/$1 >= 0.4/$1 <= 2.5) 
    {print $1 > wavelengths.txt; 
    print $2 > reflectance.txt; 
    print $3 > standardDev.txt;}}END{print "done"}' 

當我把它放到我的控制檯時,我已經在我需要訪問的文件的目錄中。我需要的數據從EVERY文件的第17行開始。數據是這樣的:

some number some number some number 
some number some number some number 
    .    .    . 
    .    .    . 
    .    .    . 

我要訪問數據時,第一列的值0.4(或約),並獲取信息,直到第一列具有大約2.5的值。第一列代表波長。我想驗證它們對於每個文件都是相同的,因此我將它們複製到一個文件中。第二列代表反射率,我希望這是一個單獨的文件,因爲稍後我將獲取這些信息並從中建立數據矩陣。第三列是反射率的標準偏差。

我現在遇到的問題是,當我運行此代碼,我得到以下錯誤:沒有這樣的文件或目錄

請,如果有人能告訴我爲什麼我可能會得到這個錯誤,還是可以的指導我如何編寫我正在嘗試做的代碼......我將非常感激。

+0

不看你的代碼,你一定要'ls',不'LS -l'。 –

回答

3

優秀的嘗試,但這是因爲你應該never parse the output of ls。不過,您可能正在尋找ls -1,而不是ls -lawk也可以接受一組文件。例如,在所需的目錄,你可以運行:的script.awk

awk -f /path/to/script.awk * 

內容:

BEGIN { 
    print "Now running" 
} 

NR == 17 && $1 >= 0.4 && $1 <= 2.5 { 

    print $1 > "wavelengths.txt" 
    print $2 > "reflectance.txt" 
    print $3 > "standardDev.txt" 
} 

END { 
    print "Done" 
} 
3

的主要問題是,你需要爲他們的字符串來引用輸出文件名的名稱不是變量。用途:

print $1 > "wavelengths.txt" 

代替:

print $1 > wavelengths.txt