Bash 具有可变数量子壳的子壳输入

Bash subshell input with variable number of subshells

我想从可变数量的日志文件中提取 grep 行,并将它们的输出与 paste 连接起来。如果我有固定数量的输出,我可以这样做:

paste <(grep $PATTERN $FILE1) <(grep $PATTERN $FILE2)

但是有没有办法对可变数量的输入文件执行此操作?我想编写一个 shell 脚本,其参数是输入文件。 shell 脚本应该 paste 来自所有这些行的 grepped 行。

您可以通过组合 find 命令列出文件并将其输出通过管道传输到 grep 使用 xargs 以确保 grep 应用于 find 命令中列出的每个文件来做到这一点

$ find /dir/containing/files -name "file.*" | xargs grep $PATTERN

使用显式命名管道,而不是进程替换。

pipes=()
for f in "$FILE1" "$FILE2" "$FILE3"; do
    n="$(mktemp)"  # Or some other command to create a temporary name
    mkfifo "$n"
    pipes+=( "$n" )
    grep "$PATTERN" "$f" > "$n" &
done

paste "${pipes[@]}"
rm  "${pipes[@]}"   # When done with them