代码之家  ›  专栏  ›  技术社区  ›  Jellicle

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

  •  0
  • Jellicle  · 技术社区  · 7 年前

    我想 grep 来自可变数量日志文件的行,并将其输出与 paste . 如果我有固定数量的输出,我可以这样做:

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

    但是,有没有一种方法可以在输入文件数量可变的情况下做到这一点呢?我想写一个shell脚本,它的参数是输入文件。shell脚本应该 粘贴 他们所有人的格蕾丝。

    2 回复  |  直到 7 年前
        1
  •  0
  •   chepner    7 年前

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

    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
    
        2
  •  -1
  •   rajeshnair    7 年前

    你可以通过组合 find 命令列出文件并将其输出管道到grep usings xargs 以确保对中列出的每个文件应用grep 找到 命令

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