如何使用 Bash 打印数组中从已知元素到未知元素的参数

如何使用 Bash 打印数组中从已知元素到未知元素的参数

我正在享受金发时刻。

这是我的数据myfile.csv

1429829254,e,SE,StckXchg,HDCU3000623,d,scan,253,47968,94,1420824420,JSSE-213,199,BS,KIT,*OUT*
1429897704,e,SE,StckXchg,HDCU3000623,d,scan,253,68496104,103,1420923818,SP-TMX6BP-101-112Z,*OUT*
1429897718,e,SE,StckXchg,HDCU3000623,d,scan,253,68510090,104,1420923832,02132,*OUT*
1429897767,e,SE,StckXchg,HDCU3000623,d,scan,253,68559085,105,1420923878,02132,*OUT*
1429912759,e,SE,StckXchg,HDCU3000623,d,scan,255,47966,107,1420924040,JSF-1,4"MEG0004,*OUT*
1429912766,e,SE,StckXchg,HDCU3000623,d,scan,255,54955,108,1420924047,02134,*OUT*
1429982863,e,SE,StckXchg,HDCU3000623,d,scan,256,47965,120,1420987942,JSDL-JA120901S,*OUT*
1429982870,e,SE,StckXchg,HDCU3000623,d,scan,256,54953,121,1420987961,02132,*OUT*
1429982877,e,SE,StckXchg,HDCU3000623,d,scan,256,61954,109,1420971277,02134,*OUT*

我目前将这些数据放入一个数组中并单独提取每个元素。

但是我们的输入数据已经改变,现在带有一条线的元素可以变化 - 并且可以变化很多。我很好奇如何从上面的示例中提取数据,从第 12 个元素到最后一个元素。

使用我的代码,这就是我所做的:

cat $out_file_name |  while read line
do
    awk_var=`echo "$line" | awk -F"," '{print $1, $5, $10, $12, $13, $14}'`         #Get the appropriate arguments
    awk_var_array=($awk_var)

    timestamp=${awk_var_array[0]}
    container==${awk_var_array[1]}
    scan_id=${awk_var_array[2]}
    part_no=${awk_var_array[3]}
    direction=${awk_var_array[4]}

    #further processing and send the above to a mysql table
done

但现在这显然行不通了。所以我需要找到一种方法来存储从第 12 个元素到最后一个元素(输入/输出)的所有元素。

是用for循环来完成的吗?也许是这样的?

for element_count in $(seq 13 $({#awk_var_array[@]}-1))
do
    var_name=my_var_''$element_count
    $var_name=${awk_var_array[element_count]
done

答案1

您可以使用bash 参数扩展 ${parameter:offset:length}带数组的形式:

$ array=($(seq 20))
$ printf "%s " "${a[@]: -12}"
9 10 11 12 13 14 15 16 17 18 19 20

答案2

根据我们从各种评论中获得的进一步信息,我认为您所需要的只是这段代码:

while IFS=, read timestamp x x x container x x x x scan_id x part_no direction rest
do
   # compose SQL command using "${timestamp}" "${container}" ... "${direction}" "${rest}" and send it to mysql database
done < "${out_file_name}"

注意:x读取命令中的 表示将被跳过的虚拟字段(并且不会分配自己的唯一标识符),并且该变量rest包含一个变量中除参数列表中显式枚举的字段之外的所有字段read

相关内容