我有一个文件,我正在搜索 2 个模式(如果匹配),然后将每个匹配的行存储到数组值中。但它不存储值
"我的命令行管理程序"命令
#Removing new line chars
a=`sed ':a;N;$!ba;s/n/ /g' sample.txt`
#storing each matched pattern row by row
while read v1; do
y[i]="$v1"
(( i++ ))
done < <(awk -F '<abc>|</abc>' '{for (i=2; i<=NF; i+=2) print $i}' <<< "$a")
输出空值:
echo ${y[0]} is empty
echo ${y[1]} is empty
echo ${y[2]} is empty
它应该是
echo ${y[0]} = 1. I am here to show
echo ${y[1]} = 2. I am here to show
echo ${y[2]} = 3. I am here to show
我的文件是:样本.txt
<abc>
1. I am here to show
</abc>
<no>
</no>
<abc>
2. I am here to show
</abc>
<abc>
3. I am here to show
</abc>
<no>
</no>
我认为这在眼睛上更容易一些:
#!/bin/bash
declare -a y
while read x; do
y[i]=$x
((i++))
done < <(awk '/^<abc>/ {p=1;next}
/^</abc>/ {p=0;next} p' sample.txt)
echo ${y[*]}
在 awk
中,变量p
确定我们是否正在打印当前行。当我们找到<abc>
时设置它,当我们找到</abc>
时清除它。
我自己发现了问题...
变量 $i
已经设置为某个值,因此当我执行 i++ 时,它将值存储在某个数组索引中。
我做了i=0
然后重新执行,它可以工作