Bash子shell输入,其子shell数量可变

时间:2018-08-06 19:03:29

标签: bash io-redirection subshell

我想从可变数量的日志文件中插入grep行,并将其输出与paste连接。如果我有固定数量的输出,则可以这样:

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

但是有一种方法可以使用可变数量的输入文件吗?我想编写一个shell脚本,其参数是输入文件。 Shell脚本应paste从所有脚本中复制grepped行。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

您可以通过组合find命令来列出文件并使用xargs将其输出传递到grep来确保grep被应用到find命令中列出的每个文件上来实现

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