将文件的特定字段存储为关联数组中的值 bash
Store specific fields of a file as the values in an associative array bash
有一个文件看起来像这样:
f1.1 f2.1 f3.1 f4.1
f1.2 f2.2 f3.2 f4.2
f1.3 f2.3 f3.3 f4.3
然后我使用第 1 列作为关联数组中的键:
declare -A arr=(); while read -r a b; do arr["$a"]="$b"; done <file
打印出键和值的结果:
for K in "${!arr[@]}"; do
echo $K --- ${arr[$K]}
done
f1.1 --- f2.1 f3.1 f4.1
f1.2 --- f2.2 f3.2 f4.2
f1.3 --- f2.3 f3.3 f4.3
如果我只想将第 2 列和第 3 列存储为值怎么办?这样上面的命令给出:
f1.1 --- f2.1 f3.1
f1.2 --- f2.2 f3.2
f1.3 --- f2.3 f3.3
取决于您的需求,但我会做一些 awk 魔术:
# will print:
# f1.1 --- f2.1 f3.1
# f1.2 --- f2.2 f3.2
# ...
awk '{print " --- "" "}' file
您还可以将 awk 与 bash 混合使用:
declare -A arr=();
while read -r a b; do
rr["$a"]="$(echo $b | awk '{print " "}')"
done < file
有一个文件看起来像这样:
f1.1 f2.1 f3.1 f4.1
f1.2 f2.2 f3.2 f4.2
f1.3 f2.3 f3.3 f4.3
然后我使用第 1 列作为关联数组中的键:
declare -A arr=(); while read -r a b; do arr["$a"]="$b"; done <file
打印出键和值的结果:
for K in "${!arr[@]}"; do
echo $K --- ${arr[$K]}
done
f1.1 --- f2.1 f3.1 f4.1
f1.2 --- f2.2 f3.2 f4.2
f1.3 --- f2.3 f3.3 f4.3
如果我只想将第 2 列和第 3 列存储为值怎么办?这样上面的命令给出:
f1.1 --- f2.1 f3.1
f1.2 --- f2.2 f3.2
f1.3 --- f2.3 f3.3
取决于您的需求,但我会做一些 awk 魔术:
# will print:
# f1.1 --- f2.1 f3.1
# f1.2 --- f2.2 f3.2
# ...
awk '{print " --- "" "}' file
您还可以将 awk 与 bash 混合使用:
declare -A arr=();
while read -r a b; do
rr["$a"]="$(echo $b | awk '{print " "}')"
done < file