테이블 키-값 쌍을 구문 분석하여 셸 변수 설정

테이블 키-값 쌍을 구문 분석하여 셸 변수 설정

다음 테이블이 있습니다.

san0    san1    san2    san3    san4    san5    san6    san7 
6.36%   6.24%   6.24%   6.24%   6.33%   6.25%   6.25%   6.25%

값을 셸 변수로 가져오려면 이 테이블을 구문 분석해야 합니다. 즉, 첫 번째 행의 레이블은 두 번째 행의 해당 필드에 있는 값을 사용하여 셸 변수가 되어야 합니다.

따라서 변수는 , will 등이 san0될 것입니다 .6.36%san46.33%

나는 많은 도구를 사용해 보았지만 때때로 사람들이 막히는 경우가 있습니다. 누구든지 도와줄 수 있나요?

답변1

      #!/bin/bash
      #first you take the input of the file, in two separate strings
      IFS=$'\n'
      {
      read line1
      read line2
      } < yourfile
   
      #then you create arrays out of the strings, by modifying IFS to        
      IFS=$'\t'
      a=($(echo "$line1"))
      b=($(echo "$line2"))

      if [[ ${#a[@]} -eq ${#b[@]} ]] #if you want no var to be empty
      then
         num=0
         while [[ -n "${a[$num]}" ]]
         do
              declare -g "$(echo ${a[$num]})"="$(echo ${b[$num]})"
              ((num++))
         done
      fi

이제 변수 ${!a[0]}를 이름으로 또는 간접적으로 호출할 수 있습니다.

답변2

프로세스 대체를 사용하여 변수 할당을 생성 awk하고 출력을 얻습니다.

. <(awk -F'\t' '{ for(i=1;i<=NF;i++) if (FNR==1) a[i]=$i; else print a[i] "=" $i }' file)

GNU와 동일 datamash:

. <(datamash --output-delimiter== transpose <file)

답변3

사용:

cols=8
declare $(awk -vcols=$cols -vRS= '{while (i++<cols) print $i"="$(i+cols)}' file)

echo "$san7"
6.25%

관련 정보