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

时间:2015-01-12 14:15:41

标签: python arrays bash python-2.7 numpy

我正在尝试使用bash 4.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

但我有这个结果:

1 E
2 A 
3 Z
4 change 
5 change
6 change
7 change
8 change

请你帮我解决这个问题吗? 提前, 谢谢! 巴萨拉布

2 个答案:

答案 0 :(得分:1)

在本机bash中逐个处理文件中的行很少是最好的方法。这是使用标准工具awk实现它的一种方法,它用于处理这种形式的数据:

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

Awk逐个处理文件中的每一行。在第一个字段的值与last+1相同之前,插入一行“更改”。始终打印正在处理的当前记录,并将第一个字段的当前值保存到变量last,以便在处理下一行时使用它。

awk中的常用速记可用于消除对第二个print的需求:

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

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

答案 1 :(得分:1)

你可以用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

现在你可以:./bash_script > output将其写入文件。