在数组中插入多行并在 bash 中比较数组
insert multiple line in array and compare array in bash
我正在尝试使用 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
你能帮我解决这个问题吗?
提前,
谢谢!
巴萨拉布
在原生 bash 中逐行处理文件中的行很少是最佳方法。这是您可以使用标准工具 awk 执行此操作的一种方法,该工具旨在处理这种形式的数据:
awk '{while(!=++last)print last+1,"change"}{last=;print}' file.txt
Awk 逐行处理文件中的每一行。直到第一个字段的值与last+1
相同,插入一行"change"。始终打印正在处理的当前记录,并将第一个字段的当前值保存到变量last
,以便在处理下一行时使用。
awk 中常见的 shorthand 可用于消除对第二个 print
的需要:
awk '{while(!=++last)print last+1,"change"}{last=}1' file.txt
awk 脚本的格式是 rule { action }
。默认操作是 {print}
并且 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
将其写入文件。
我正在尝试使用 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
你能帮我解决这个问题吗? 提前, 谢谢! 巴萨拉布
在原生 bash 中逐行处理文件中的行很少是最佳方法。这是您可以使用标准工具 awk 执行此操作的一种方法,该工具旨在处理这种形式的数据:
awk '{while(!=++last)print last+1,"change"}{last=;print}' file.txt
Awk 逐行处理文件中的每一行。直到第一个字段的值与last+1
相同,插入一行"change"。始终打印正在处理的当前记录,并将第一个字段的当前值保存到变量last
,以便在处理下一行时使用。
awk 中常见的 shorthand 可用于消除对第二个 print
的需要:
awk '{while(!=++last)print last+1,"change"}{last=}1' file.txt
awk 脚本的格式是 rule { action }
。默认操作是 {print}
并且 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
将其写入文件。