2011-12-29 43 views
-2

我想讀一個文件這樣從文件中讀取 - awk的

1.23213213 
0.12321321 
-1.12321321 
0.23232322 

到一個變量,或陣列在主{}代碼某處使用它。 但我想使用它,如果這個文件存在。我如何檢查它是否已經存在,如果不存在,那麼不要使用該變量或數組?

回答

2

我不完全理解你想要什麼來實現的,但也許這樣的事情可能對你有用:

它處理由行的文件行並保存每一個陣列中的,關鍵是行號,所以你保持秩序。在END部分中,檢查處理了多少行,並獲取文件是否包含內容。

awk '{ line[ FNR ] = $0 } END { if (FNR > 0) { print "File" } else { print "NO file" } }' infile 

編輯評論:

awk您可以處理來自命令行許多文件。

BEGIN { 
    ... 
} 

## Processing of first file in command line. 
FNR == NR { 
    a[ FNR ] = $0 
    next 
} 

## Processing of second file in command line 
FNR < NR { 
    ## Check if array 'a' has the values you want and use them 
    ## 'for(...)variable += a[i]' or whatever. 
} 

運行腳本,如:

awk -f script.awk first_file.txt second_file.txt 

但如果first_file.txt不存在,awk將一個錯誤抱怨。

+0

原始代碼類似於:BEGIN {...} {...} infile。但是我想在{...}部分使用另一個文件中的一些常數。到目前爲止,它看起來像這樣:BEGIN {a [1] = 1.23213213; a [2] = 0.12321321; a [3] = - 1.12321321; a [4] = 0.23232322;} ... {... for(.. 。)variable + = a [i]; ...} – user1116360 2011-12-29 12:59:04

+0

我正在考慮類似的東西,但我不確定它是否是一種好方法:BEGIN {while((getline x <「./some/infile」)> 0)} {... for( ...)可變+ = X [I]; } – user1116360 2011-12-29 13:05:08

+0

嗨,你建議的代碼不起作用...如果我之前有這一行,可能會有問題:NR == 1 {...}? – user1116360 2011-12-31 13:45:02