我面临着一个令人困惑的问题(至少对我而言)。我正在尝试读取一些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文件
感谢您的帮助和耐心
答案 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的知识。
由于