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.

관련 정보