我正在尝试使用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
请你帮我解决这个问题吗? 提前, 谢谢! 巴萨拉布
答案 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
将其写入文件。