0

我正面临一个令人困惑的(至少对我而言)问题。我正在尝试读取一些 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 文件

感谢您的帮助和耐心

4

3 回答 3

2

在您的情况下将是:

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

正如Kailash K Pawar提到的正确方法

于 2012-10-26T11:28:12.133 回答
0

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

于 2012-10-26T11:20:32.020 回答
0

感谢大家回答和评论这个问题。我脚本中的问题是 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 的知识。

谢谢

于 2012-10-29T10:45:30.933 回答