Awk在bash脚本中不工作

Awk在bash脚本中不工作,awk,Awk,我面临着一个令人困惑的问题(至少对我来说)。我试图读取一些csv文件,然后提取一些值进行一些检查和计算。我正在使用awk访问文件并提取必填字段 奇怪的是,awk语句在bash提示符下正确运行,但在脚本中运行时不起作用。例如,我从bash提示符获得: paco@NIMBUS:~/work$ awk -F\; '$1 == "21-08-2012" && $2 == "'17'" { print $3 }' niveles-rams.csv 2 但是 不返回任何值。CSV文件来自w

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

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

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

不返回任何值。CSV文件来自windows中的Excel,所以我想可能编码有问题吧

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

感谢您的帮助和耐心

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

在您的情况下,将是:

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

由于Kailash K Pawar采用了正确的方法

感谢大家回答和评论这个问题。我脚本中的问题是awk问题,但不是我问的问题。我的错误是,我没有正确读取“区域”变量:

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,并做这个把戏

你所有的答案都对我很有用,让我对awk有所了解


谢谢

我建议你重读最后一个问题的答案。我会的,谢谢。关键是,同一个awk语句在脚本中用于不同的输入文件,但我尝试将所有文件保存为UTF8,以避免因使用Excel生成文件而出现问题。有关如何将shell变量的值传递给awk脚本以及@jacekminiak在此处发布的答案,请参阅。抱歉,已上载旧版本。这不是问题所在,谢谢你总是引用你的shell变量,除非你有特别的理由不这么做。fecha=“$fecha”和area=“$area”。差异巨大。在引号中可以得到变量包含的字符串。如果没有引号,您将得到应用分词、文件名扩展等的结果,。等等,将其添加到包含变量的字符串中。作为一个简单的示例,请在可写目录中尝试此操作:>tmp1;>tmp2;var=“tmp*”;回声“$var”;echo$var…第一个echo的输出为“tmp*”,第二个echo的输出为“tmp1 tmp2”。如果不引用变量,可能会产生许多其他意想不到的结果。另请参阅我刚刚发表的关于未引用变量的另一个问题的评论。令人惊讶的是,同样问题的另一个表现形式刚刚出现。见我的评论。我不会发布更多的示例,请相信我-引用您的shell变量。
i=1
while [ $i -lt 32 ]     
   do
     let i=$i+1
     area=`awk 'BEGIN { FS=";" ; FNR="1" } FNR == "'$i'" {print $1}' pobles.csv`