2017-05-05 86 views
-1

我正在处理包含两列的巨大CSV文件(filtest.csv)。从第1列开始,我想读取当前行并将其与前一行的值进行比较。如果是greaterequal,继续比较,如果当前单元格的值是smaller比前一行 - 那么我想跳到第二列并采取当前行(第二列)中的值。接下来,我想将列1中的larger value与第2列的同一单元格中的值和第1列中的较小值相比较。让我通过此示例进行说明。例如在下表中:我们将根据我的要求从第1列开始的较小值是327(因为327小于先前的值340) - 然后我们取500(这是第2列的相应单元格值) 。 最后我们将340除以500得到值0.68。将值打印到控制台后,我的bash脚本应该立即退出。awk脚本 - 在csv文件中循环两列的行值

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

替换' val = $ 1/$ 2''val = p/$ 2' – RomanPerekhrest

回答

1

从第一描述

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

在每一行的末尾,第一列被存储在分组 然后,当第一列的值是至少比一个先前,将打印比率和退出

+0

我已经这样做了 – Mahsolid

+0

你能解释一下“通过两列中的值循环并执行控制语句”的例子输入和预期的输出 –

+0

这个例子在第一个例子中段,亲爱的。 – Mahsolid