我需要搜索一个数组,然后一旦找到我正在寻找的东西,请阅读 元素加上几个相同的数组并将所有内容写入文件。
这是我到目前为止所拥有的
if [ -e "${EPH_DIR}" ]
then
i=0
while read line
do
FILE[$i]="$line"
i=$(($i+1))
done < ${EPH_DIR}
fi
for i in ${FILE[*]}
do
echo "$i"
if [[ $i == ${SAT} ]]
then
echo "Found it: $i"
fi
done
答案 0 :(得分:0)
如果你想用C风格的for循环:
for ((i=0; i < ${#FILES[@]}; i++)); do
if [[ ${FILES[i]} == $SAT ]]; then
printf "%s\n" "found it" "${FILES[i]}" "${FILES[i+1]}" "${FILES[i+2]}"
fi
done
请注意括号中的数组索引是算术表达式,因此不需要美元符号。
答案 1 :(得分:0)
您可以使用内置的grep
开关-A
:
-A NUM, --after-context=NUM Print NUM lines of trailing context after matching lines.
只需将数组的内容导出到grep
,然后使用-A
为您提供许多您想要打印的额外行。例如,使用-A2
在匹配$STAT
的任何行之后打印另外两行:
printf -- '%s\n' "${FILE[@]}" | grep -A2 "^$SAT$"
如果您希望将其转到新文件(如问题标题所示),则只需将其重定向到您想要的位置:
printf -- '%s\n' "${FILE[@]}" | grep -A2 "^$SAT$" > /path/to/my/file
由于您的数组看起来只是从目录$EPH_DIR
获取文件列表,而不是使用循环,您可以通过执行以下操作将列表放入数组中:
FILE=( "$(ls $EPH_DIR)" )
或者,如果此打印是您使用数组的唯一内容,则可以完全跳过该数组,只需将目录列表直接发送到grep
:
ls $EPH_DIR | grep -A2 "^$SAT$"