解析表格键值对以设置 shell 变量

解析表格键值对以设置 shell 变量

我有下表:

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

我需要解析此表以将值导入到 shell 变量中,即第一行中的标签应成为 shell 变量,其值来自第二行中的相应字段。

因此,变量san0将是6.36%san4将是6.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%

相关内容