bash-读取一个数组,然后从该点向文件写入一定数量的元素

bash-读取一个数组,然后从该点向文件写入一定数量的元素,bash,Bash,我需要搜索一个数组,然后一旦我找到了我要找的,就阅读它 元素加上同一数组中的多个元素,并将所有元素写入一个文件 这就是我目前所拥有的 if[-e${EPH_DIR}] 然后 i=0 读行时 做 文件[$i]=$line i=$$i+1 完成

我需要搜索一个数组,然后一旦我找到了我要找的,就阅读它 元素加上同一数组中的多个元素,并将所有元素写入一个文件

这就是我目前所拥有的

if[-e${EPH_DIR}] 然后 i=0 读行时 做 文件[$i]=$line i=$$i+1 完成<${EPH_DIR} fi 对于${FILE[*]}中的i 做 回声$i 如果[[$i==${SAT}]] 然后 echo找到了:$i fi 完成
如果要在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
请注意,括号中的数组索引是一个算术表达式,因此不需要美元符号。

您可以使用内置的grep开关-A:

只需将数组的内容导出到grep中,并使用-A来提供您想要打印的额外行数。例如,使用-A2在任何与$STAT匹配的行之后再打印两行:

如果您想将此文件转到一个新文件,如问题标题所示,则只需将此文件重定向到您想要的位置:

printf -- '%s\n' "${FILE[@]}" | grep -A2 "^$SAT$" > /path/to/my/file
由于您的数组似乎只是从目录$EPH_DIR中获取一个文件列表,而不是使用循环,因此您可以通过执行以下操作将列表放入数组中:

FILE=( "$(ls $EPH_DIR)" )
或者,如果此打印是您使用数组的唯一目的,您可以完全跳过数组,直接将目录列表发送到grep:


它是如何失败的?至少您可能需要${FILE[@]}而不是${FILE[*]}Cairnarvon-谢谢您的编辑帮助…非常感谢:凯文-我找到了我正在寻找的元素,但是我还需要获得以下2个元素。下面是我正在读的文件的样子:O3B M001 11111 U 09008D 12250.00000000.00000000-00000-0.00000-0.832 11111 0.0001 0.0000 000000 1 0.0000 0.0000 5.00300000 1053 O3B M002 11112 U 09008D 12250.00000000.00000000-0-0.00000-0.84 2 11112 0.0001 15.0000 000000 1 0.0000 0.0000 5.00300000 1050你是谁可能正在查找此:${FILE[@]:$i:2}-从位置取两个数组元素$Itis是我查找元素的位置:O3B M001 11111 U 09008D 12250.00000000.00000000-00000-00000-0 0.83 2 11111 0.0001 0.0000 000000 1 0.0000 0.0000 5.00300000 1053 O3B M002找到了:O3B M002 1 11112U 09008D 12250.00000000.00000000-000000-0 0 84 2 11112 0.0001 15.0000 000000 1 0.0000 0.0000 5.00300000 1050 O3B M003
printf -- '%s\n' "${FILE[@]}" | grep -A2 "^$SAT$" > /path/to/my/file
FILE=( "$(ls $EPH_DIR)" )
ls $EPH_DIR | grep -A2 "^$SAT$"