Arrays 是否仅基于相同的索引号对齐阵列?

Arrays 是否仅基于相同的索引号对齐阵列?,arrays,bash,multidimensional-array,awk,Arrays,Bash,Multidimensional Array,Awk,您好,这是我关于数组和bash脚本的第二个问题。谢谢 我有两个数组。一个数组是 a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 另一个数组是 b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8] b[9] b[10] 是否可以以任何方式打印/输出/对齐2,以便它们按照索引编号对齐,以便输出始终是并排的相同索引编号: a[1] b[1] a[2] b[2] a[3] b[3] a[4] b[4] a[5] b[5]

您好,这是我关于数组和bash脚本的第二个问题。谢谢

我有两个数组。一个数组是

a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
a[9]
a[10]
另一个数组是

b[1]
b[2]
b[3]
b[4]
b[5]
b[6]
b[7]
b[8]
b[9]
b[10]
是否可以以任何方式打印/输出/对齐2,以便它们按照索引编号对齐,以便输出始终是并排的相同索引编号:

a[1] b[1]
a[2] b[2]
a[3] b[3]
a[4] b[4]
a[5] b[5]
a[6] b[6]
a[7] b[7]
a[8] b[8]
a[9] b[9]
a[10] b[10]
事实上,它们从一开始就被区分开来。因此,实际上,第一个数组看起来像:

a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
a[9]
a[10]
第二个,不符合原始排序顺序,是

b[2]
b[4]
b[3]
b[5]
b[7]
b[6]
b[9]
b[1]
b[9]
b[8]
实际需要的输出是在混淆排序之后,通过索引对齐2个数组。因此,期望的输出是在弄乱它们之后的b,然后我需要根据索引号在它们旁边对应的a

b[2] a[2]
b[4] a[4]
b[3] a[3]
b[5] a[5]
b[7] a[7]
b[6] a[6]
b[9] a[9]
b[1] a[1]
b[10] a[10]
b[8] a[8]
这在bash/awk中可能吗? 如果使用一个简单的多维数组,这会容易得多。对于这种情况,我还没有想到一维关联数组的解决方案

如果我有一个多维数组,我只需要在同一数组中的两列中始终有2个值,但在同一数组的不同维度中。这样我就可以按第二维度进行排序,而第一维度就在它旁边,以便进一步计算

由于bash/awk中缺少多维数组,我只能依靠索引号来保持它们的对齐,但我无法做到这一点,因为我不知道如何在索引对齐的情况下打印相邻的两个数组


如何解决这个问题?

因为awk数组没有排序,所以我假设您的“数组”是文件中的行。如果是这种情况,请尝试:

$ awk -F'[][]' 'FNR==NR{a[$2+0]=$0; next} {print $0,a[$2+0]}' filea fileb
b[2] a[2]
b[4] a[4]
b[3] a[3]
b[5] a[5]
b[7] a[7]
b[6] a[6]
b[9] a[9]
b[1] a[1]
b[10] a[10]
b[8] a[8]
工作原理
  • -F'[]]'

    这告诉awk使用
    [
    ]
    作为字段分隔符。这样,我们感兴趣的数字是字段2

  • FNR==NR{a[$2+0]=$0;next}

    读取第一个文件时,我们将每行
    $0
    保存在
    a
    数组中
    $2
    索引下。然后,我们跳过其余的命令,跳转到下一行

  • 打印$0,[$2+0]

    在读取第二个文件时,我们打印第二个文件中的每一行,
    $0
    ,以及第二个字段的键下的数组
    a
    的值,
    $2

按顺序打印两个awk阵列 在本例中,我们使用
split
创建到awk数组,然后按顺序打印:

$ awk 'BEGIN{split("a b c d",a); split("1 2 3 4",b); for (i=1;i<=length(a);i++)print a[i],b[i]}'
a 1
b 2
c 3
d 4

$awk'开始{split(“a b c d”,a);split(“1 2 3 4”,b);for(i=1;i你是说数组的排序不同吗?你是说迭代顺序是通过其他方式给出的吗?在awk中,你可以对数组排序并检索索引顺序。也许问实际问题而不是导数问题会有所帮助!这里的导数=)bash和awk是完全不同的工具,每个工具都有自己的语法和语义。你是在问bash数组、awk数组还是其他什么?awk数组是关联的,没有与它们的索引相关联的特定顺序,所以idk当你说
时,它们实际上从一开始就被分类为不同的W GNU awk具有多维数组,您可以使用
in
循环(google
sorted_in
)对索引进行任意排序,以获得输出。