Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Shell脚本-循环csv文件多列中的值_Bash_Shell_Csv_Awk - Fatal编程技术网

Bash Shell脚本-循环csv文件多列中的值

Bash Shell脚本-循环csv文件多列中的值,bash,shell,csv,awk,Bash,Shell,Csv,Awk,我正在处理一个包含两列的巨大CSV文件(filename.CSV)。从第1列中,我想读取当前行并将其与前一行的值进行比较。如果大于或等于,则继续比较,如果当前单元格的值小于上一行,则我想跳到第二列并获取当前行(第二列)中的值。接下来,我想将第1列中的值较大的值除以第2列中相同单元格中的值。例如,在下表中:根据我的要求,我们得到的较小值是327(因为327比之前的值340小),然后我们取500(这是第二列上对应的单元格值)。最后我们将340除以500,得到值0.68。我的bash脚本应该在我们将值

我正在处理一个包含两列的巨大CSV文件(
filename.CSV
)。从第1列中,我想读取当前行并将其与前一行的值进行比较。如果
大于
等于
,则继续比较,如果当前单元格的值小于上一行,则我想跳到第二列并获取当前行(第二列)中的值。接下来,我想将第1列中的值
较大的值
除以第2列中相同单元格中的值。例如,在下表中:根据我的要求,我们得到的较小值是327(因为327比之前的值340小),然后我们取500(这是第二列上对应的单元格值)。最后我们将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
在下面的脚本中,它只适用于第1列,但我想根据我上面提到的条件将其扩展到两列

awk '$1<p{ 
    val=$1/p                   
    if(val>=0.8 && val<=0.9)
        {
            print "value is:" $1/p
            print "A"
        }
    else if(val==0.8)
        {
            print "B"
        }
    else if(val>=0.6 && val <=0.7)
        {
            print "C" 

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

awk'$1=0.8&&val=0.6&&val您的第一个期望值
0.654
大于
0.65
(第三个条件为最接近的条件),这就是为什么它不适合您的任何条件

扩展脚本,如下所示:

awk '$1<p{ 
    val=$1/$2  # to divide the first column value on the second column value              
    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

我修改的关键行是:

val=$1/$2  # to divide the first column value on the second column value

您的第一个期望值
0.654
大于
0.65
,这就是为什么它不符合您的任何条件。实际上,这些值并不重要-我现在将解决这个问题。“p”的表达式是否应该更改(或修改)?@Mahsolid,为什么应该更改?我已根据您的输入说明修复了您的脚本哦,对不起。我现在拿到了,谢谢。接受答案!顺便说一下,当我尝试运行它时,我得到了这个错误
awk:cmd。第2行:(FILENAME=filetest.csv FNR=23)致命:尝试用零除,可能是。我们可以在那一刻调试。让我们在除法之前打印这些值:
print$1,$2;val=$1/$2
。调试输出是什么?
val=$1/$2  # to divide the first column value on the second column value