简体   繁体   English

如何创建一个从 csv 文件读取输入的 bash 脚本

[英]how to create a bash script that reads input from a csv file

I have a csv file as below,我有一个 csv 文件,如下所示,

No. Of tests,5,,,,
Test#,Test Start Time,JMX name,csv1 name,csv2 name,csv3 name
1,11:30:00 UTC,USM.jmx,FRT.csv,TSG.csv,JSJ.csv
2,13:30:00 UTC,TLB.jmx,HJH.csv,JFG.csv,KSK.csv
3,15:30:00 UTC,TVS.jmx,HGH.csv,JSF.csv,UTY.csv
4,17:30:00 UTC,PLM.jmx,LKI.csv,KYT.csv,NBH.csv
5,19:30:00 UTC,NSC.jmx,GAG.csv,BDG.csv,LKD.csv
6,21:30:00 UTC,BVF.jmx,HAH.csv,DHD.csv,QWE.csv
7,23:30:00 UTC,BVG.jmx,RQR.csv,HDG.csv,RTY.csv
8,01:30:00 UTC,FRE.jmx,RET.csv,HDH.csv,ASD.csv
9,03:30:00 UTC,VFR.jmx,TRD.csv,HDH.csv,ASF.csv
10,05:30:00 UTC,YUY.jmx,YHG.csv,HDG.csv,ZXC.csv

I want to run couple of tests as defined in using this csv file.我想运行使用此 csv 文件中定义的几个测试。 I want to create a bash shell to run these tests.我想创建一个 bash shell 来运行这些测试。 Pseudo code for the shell is like, shell的伪代码就像,

for (i=0;i<no. of tests defined in csv's first line;i++)
{
      First loop should be started at time mentioned in first line, second column.
      execute.sh JMX_name1 csv1_name1 csv2_name1 csv3_name1 (pick from the first row)
      (I have this execut.sh)
}

How to achieve this, can someone please help.如何实现这一点,有人可以帮忙。 How to save different values of csv in different variables, so that I can use them in loop.如何在不同的变量中保存不同的 csv 值,以便我可以在循环中使用它们。 Please help.请帮忙。

I'd write this:我会这样写:

(
    IFS=, 
    read -ra ntests
    read header
    for ((i = 1; i <= ${ntests[1]}; i++ )); do
        read -ra test

        # pause until time is ${test[1]}
        # implementation left as an exercise

        execute.sh "${test[@]:2:4}"
    done
) < testing_file.csv

Thats grouping all the reads and the loop in a subshell, so the redefinition of IFS does not alter the current shell.那就是将所有读取和循环分组在一个子外壳中,因此 IFS 的重新定义不会改变当前外壳。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM