2017-05-05 68 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