テーブルのキーと値のペアを解析してシェル変数を設定する

テーブルのキーと値のペアを解析してシェル変数を設定する

次の表があります。

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

値をシェル変数にインポートするには、このテーブルを解析する必要があります。つまり、最初の行のラベルは、2番目の行の対応するフィールドの値を使用してシェル変数にする必要があります。

したがって、変数は、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%

関連情報