使用bash将数组中的数据添加到文件中的新列

使用bash将数组中的数据添加到文件中的新列,bash,unix,Bash,Unix,因此,我有姓名、年龄和城市数据: name=(Alex Barbara Connor Daniel Matt Peter Stan) age=(22 23 55 32 21 8 89) city=(London Manchester Rome Alberta Naples Detroit Amsterdam) 我想设置以下3列数据,标题为“年龄”和“城市”,我可以使用 touch info.txt echo "Name Age City" > info.txt for

因此,我有姓名、年龄和城市数据:

name=(Alex Barbara Connor Daniel Matt Peter Stan)
age=(22 23 55 32 21 8 89)
city=(London Manchester Rome Alberta Naples Detroit Amsterdam)
我想设置以下3列数据,标题为“年龄”和“城市”,我可以使用

touch info.txt
echo "Name Age City" > info.txt
for n in ${name[@]}; do
    echo $n >> info.txt
done
但我不知道如何获取其余的数据,而且我似乎也找不到任何关于如何添加不同于新列的数据的地方


任何帮助都将不胜感激,谢谢。

尝试以下方法:

name=(Alex Barbara Connor Daniel Matt Peter Stan)
age=(22 23 55 32 21 8 89)
city=(London Manchester Rome Alberta Naples Detroit Amsterdam)

touch info.txt
echo "Name Age City" > info.txt
for n in $(seq 0 6); do
    echo ${name[$n]} ${age[$n]} ${city[$n]} >> info.txt
done
在info.txt中输出:

Name Age City
Alex 22 London
Barbara 23 Manchester
Connor 55 Rome
Daniel 32 Alberta
Matt 21 Naples
Peter 8 Detroit
Stan 89 Amsterdam

您可以为每列固定特定的宽度(此处使用20)

name=(亚历克斯·芭芭拉·康纳·丹尼尔·马特·彼得·斯坦)
年龄=(22 23 55 32 21 8 89)
城市=(伦敦曼彻斯特罗马阿尔伯塔那不勒斯底特律阿姆斯特丹)
对于“${!name[@]}”中的i;做
printf“%-20s%-20s%-20s\n”“${name[i]}”“${age[i]}”“${city[i]}”
完成
输出:

Alex                 22                   London              
Barbara              23                   Manchester          
Connor               55                   Rome                
Daniel               32                   Alberta             
Matt                 21                   Naples              
Peter                8                    Detroit             
Stan                 89                   Amsterdam 

JoseLinares解决了你的问题。下面是一个使用
paste
命令的解决方案,其目的正是:将不同来源的数据放在不同的列中

$ printf 'Name\tAge\tCity\n'
$ paste <(printf '%s\n' "${name[@]}") \
        <(printf '%3d\n' "${age[@]}") \
        <(printf '%s\n' "${city[@]}")

Name    Age City
Alex     22 London
Barbara  23 Manchester
Connor   55 Rome
Daniel   32 Alberta
Matt     21 Naples
Peter     8 Detroit
Stan     89 Amsterdam

$printf'名称\tAge\tCity\n'

$paste a alternative loop:
for((n=0;您也可以使用printf而不是echo来固定宽度。请检查下面我的答案。很好work@Cyrus“${!name[@]}”中n的
会更地道。这正是我需要的谢谢!我对bash非常陌生,我需要一些方法来获取数字1->7,但找不到任何如此巨大的数字谢谢!@user15192788只需考虑数组索引从0开始,而不是从1开始。所以它应该是$(seq 0 6)。我只是编辑了我的答案来解决这个问题。