我想从数量可变的日志文件中提取grep行,并将它们的输出与paste连接起来。如果我有一个固定数量的输出,我可以这样做:
paste <(grep $PATTERN $FILE1) <(grep $PATTERN $FILE2)但是,有没有一种方法可以在输入文件数量可变的情况下做到这一点?我想写一个shell脚本,它的参数是输入文件。shell脚本应该对所有这些行执行paste操作。
发布于 2018-08-07 03:22:05
使用显式命名管道,而不是进程替换。
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发布于 2018-08-07 03:15:10
为此,您可以组合使用find命令列出文件,并使用xargs将其输出通过管道传输到grep,以确保在find命令中列出的每个文件上都应用了grep
$ find /dir/containing/files -name "file.*" | xargs grep $PATTERNhttps://stackoverflow.com/questions/51714096
复制相似问题