2011-12-29 26 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