Awk脚本 - 循环遍历csv文件中两列的行值

时间:2017-05-05 11:35:06

标签: bash shell csv awk

我正在使用包含两列的巨大CSV文件(filtest.csv)。从第1列开始,我想读取当前行并将其与前一行的值进行比较。如果是greaterequal,继续比较,如果当前单元格的值是smaller而不是前一行 - 那么我想跳转到第二列并取值当前行(第二列)。接下来,我想将第1列中的larger value除以第2列的同一单元格中的值与第1列中较小值的值。让我用这个例子来澄清。例如,在下表中:根据我对第1列的要求,我们将使用的值越小(因为327小于之前的值340) - 然后我们取500(这是第2列的相应单元格值) 。 最后我们将340除以500得到值0.68 。在我们将值打印到控制台后,我的bash脚本应该立即退出。

338,800
338,550
339,670
340,600 
327,500
301,430
299,350
284,339
284,338
283,335
283,330
283,310
282,310
282,300
282,300
283,290

在下面的脚本中,我尝试在两列的同一行上进行除法运算,并且工作正常

awk -F, '$1<p && $2!=0{ 
val=$1/$2     
if(val>=0.85 && val<=0.9)
    {
        print "value is:" $1/p
        print "A"
    }
else if(val==0.8)
    {
        print "B"
    }
else if(val>=0.5 && val <=0.7)
    {
        print "C" 

    }
else if(val==0.5)
    {
        print "E"
    }
else
    {
        print "D" 
    }
exit
}
{ 
    p=$1 
}' filetest.csv

但是,如前所述,我们如何循环遍历两列中的值并在两列的两个不同行上执行控制语句?

1 个答案:

答案 0 :(得分:1)

从第一次描述

 awk -F, '$1<prev{print prev/$2;exit}{prev=$1}' <input.txt

在每一行的末尾,第一列存储在prev中 然后,当第1列的值小于prev时,它将打印比率并退出