Python 在数组中插入多行并在bash中比较数组

Python 在数组中插入多行并在bash中比较数组,python,arrays,bash,python-2.7,numpy,Python,Arrays,Bash,Python 2.7,Numpy,我正在尝试使用Bash4.1转换数组(文件c)。我也尝试过python/numpy,但我是一个新手,还不太了解它。我的问题是: 我有以下数组: 1 E 2 A 3 Z 5 R 6 A 8 A 当数组中的增量大于1时,我想添加一行,如下所示: 1 E 2 A 3 Z 4 change 5 R 6 A 7 change 8 A 我尝试使用以下代码执行此操作: i=1 while read s t; do if [[ $i = $s ]

我正在尝试使用Bash4.1转换数组(文件c)。我也尝试过python/numpy,但我是一个新手,还不太了解它。我的问题是:

我有以下数组:

1 E
2 A
3 Z
5 R
6 A
8 A
当数组中的增量大于1时,我想添加一行,如下所示:

1 E
2 A 
3 Z
4 change 
5 R
6 A
7 change
8 A
我尝试使用以下代码执行此操作:

        i=1
        while read s t; do
             if [[ $i = $s ]];
             then echo "$s $t" >> e
             else echo "$i change" >> e ; s=$s[$(($i-1))]
             fi

        i=$(($i+1))
        done < c
你能帮我解决这个问题吗? 提前 非常感谢。
Basarab

在原生bash中逐个处理文件中的行很少是最好的方法。这里有一种方法可以使用标准工具awk来处理此表单的数据:

awk '{while($1!=++last)print last+1,"change"}{last=$1;print}' file.txt
Awk逐个处理文件中的每一行。在第一个字段的值与
last+1
相同之前,插入一行“change”。始终打印正在处理的当前记录,并将第一个字段的当前值保存到变量
last
,以便在处理下一行时使用

可以使用awk中的常用速记来消除第二次
打印的需要

awk '{while($1!=++last)print last+1,"change"}{last=$1}1' file.txt

awk脚本的格式是
规则{action}
。默认操作是
{print}
1
是计算结果始终为true的最短规则,因此每一行都会被打印出来。

您可以在bash中执行此操作,离它不远:

#!/bin/bash
i=1
while read s t;
do
    while [[ $s != $i ]]
    do
        echo "$i change"
        i=$((i+1))
    done
    echo "$s $t"
    i=$((i+1))
done < c
#/bin/bash
i=1
在阅读s t时;
做
而[[$s!=$i]]
做
回显“$i找零”
i=$((i+1))
完成
回声“$s$t”
i=$((i+1))
完成

现在您可以执行以下操作:
/bash\u script>output
将其写入文件。

没问题,我已经更新了代码,以处理大于1的输入间隙。
#!/bin/bash
i=1
while read s t;
do
    while [[ $s != $i ]]
    do
        echo "$i change"
        i=$((i+1))
    done
    echo "$s $t"
    i=$((i+1))
done < c