我有下表:
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
使用awk:
cols=8
declare $(awk -vcols=$cols -vRS= '{while (i++<cols) print $i"="$(i+cols)}' file)
echo "$san7"
6.25%