awk没有在bash脚本中工作

时间:2012-10-26 11:07:28

标签: awk

我面临着一个令人困惑的问题(至少对我而言)。我正在尝试读取一些csv文件,然后提取一些值来进行一些检查和演算。我正在使用awk访问文件并提取必填字段。

奇怪的是,awk语句在bash提示符下正确运行,但在脚本中运行时不起作用。作为一个例子,我从bash提示符:

paco@NIMBUS:~/work$ awk -F\; '$1 == "21-08-2012" && $2 == "'17'" { print $3 }' niveles-rams.csv
2

但是

nrams1=`awk -F\; '$1 == "'$fecha'" && $2 == "'$area'" { print $3 }' niveles-rams.csv`
echo $nrams1

不会返回任何值。 CSV文件来自Windows中的Excel,所以可能编码有问题,我猜?

您可以在以下URL中找到脚本validacio.bash和csv文件

感谢您的帮助和耐心

3 个答案:

答案 0 :(得分:2)

在你的情况下将是:

nrams1=`awk -F";" -v fecha=$fecha -v area=$area '$1 == fecha && $2 == area { print $3 }' niveles-rams.csv` 

Kailash K Pawar 采用了正确的方法

答案 1 :(得分:0)

在日期字段中的文件(niveles-rams.csv)中,您使用/(斜杠)符号但使用bash脚本 - (减号)符号。也许这就是原因。

答案 2 :(得分:0)

感谢大家回答和评论这个问题。我的脚本中的问题是awk问题,但不是我问过的问题。我的错误是我没有正确阅读" area"变量:

i=1
while [ $i -lt 32 ]     
   do
     let i=$i+1
     area=`awk 'BEGIN { FS=";" ; FNR="1" } FNR == "'$i'" {print $1}' pobles.csv`

文件 pobles.csv 没有标题,脚本没有正确读取第一条记录。然后错误是级联的,所以最终结果是错误的。现在,添加一个标题并开始从i = 2(第二个记录)读取它可以工作。

当然,必须有一个更聪明的解决方案,但我是awk的新手而无法明白这一点。希望我能学到更多知识并做到这一点。

你的所有答案对我都非常有用,让我学到了一些关于awk的知识。

由于