我正在寻找一种使用column
命令打印出一个关联数组的方法,我填写就像有可能有办法做到这一点,但我没有多少运气。
declare -A list
list=(
[a]="x is in this one"
[b]="y is here"
[areallylongone]="z down here"
)
我希望结果是一张简单的表格。我已经使用了带有标签的循环,但在我的情况下,长度足以抵消第二列。
输出应该看起来像
a x is in this one
b y is here
areallylongone z down here
答案 0 :(得分:3)
您正在寻找类似的东西吗?
declare -A assoc=(
[a]="x is in this one"
[b]="y is here"
[areallylongone]="z down here"
)
for i in "${!assoc[@]}" ; do
echo -e "${i}\t=\t${assoc[$i]}"
done | column -s$'\t' -t
输出:
areallylongone = z down here
a = x is in this one
b = y is here
我使用tab char分隔键和值,并使用column -t
将输出列表,-s
将输入分隔符设置为tab char。来自man column
:
-t
确定输入包含的列数并创建表。默认情况下,列用空格分隔,或者用字符分隔 使用-s选项提供的ters。适用于漂亮的打印显示
-s
指定一组字符,用于分隔-t选项的列。
答案 1 :(得分:1)
一种(简单)方法是通过将键列和值列粘贴在一起:
paste -d $'\t' <(printf "%s\n" "${!list[@]}") <(printf "%s\n" "${list[@]}") | column -s $'\t' -t
对于您的输入,它产生:
areallylongone z down here
a x is in this one
b y is here
为了处理(两个)键和值中的空格,我们在TAB
(\t
选项)和{{paste
中使用-d
(column
)作为列分隔符1}}(-s
选项)命令。
答案 2 :(得分:0)
从hek2mgl
的答案中获得所需的输出 declare -A assoc=(
[a]="x is in this one"
[b]="y is here"
[areallylongone]="z down here"
)
for i in "${!assoc[@]}" ; do
echo "${i}=${assoc[$i]}"
done | column -s= -t | sort -k 2