gpt4 book ai didi

linux - 我如何使用 bash 脚本在后台执行 grep 链命令

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:39 26 4
gpt4 key购买 nike

我每天有一个 24 小时日志的数据。 grep 所需字符串的数据量很大,需要 3 小时才能在所有 24 小时目录中搜索字符串。为了减少耗时,我决定将 24 小时分为三个部分,并希望使用 &

在后台并行执行每个部分
cat test.sh
log1="22 01 02 03 04 05 06 21"
log2="07 08 09 10 11 12 13 22"
log3="14 15 16 17 18 19 20 23"

for me in $log1
do
for me1 in $me
do
cd $me1
$(cat * | grep ASS-va1appus06-1480458532238-14424 | grep -i "am/agent/registered" &) >../log\_$me1 &
cd ..
done
done

这里的问题没有按预期工作。它没有运行后台,也没有更新日志文件,脚本没有进一步处理就出来了。

some of the script output is
+ cd 22
+ cd ..
++ grep ASS-va1appus06-1480458532238-14424
++ grep -i am/agent/registered
++ cat logfile.log1 logfile.log2 .......

如果您发现命令没有按照给定的 grep 序列执行,

最佳答案

您错误地设计了并行调用,将并行代码位与主脚本中的调用混合在一起。您可以尝试以下方法:

#!/bin/bash
log1="22 01 02 03 04 05 06 21"
log2="07 08 09 10 11 12 13 22"
log3="14 15 16 17 18 19 20 23"

for me in $log1
do
for me1 in $me
do
# you could aslo get rid of the cd altogether
# (grep "ASS-va1appus06-1480458532238-14424" $me1/* | grep -i "am/agent/registered" >log\_$me1) &
(cd $me1 && grep "ASS-va1appus06-1480458532238-14424" * | grep -i "am/agent/registered" >../log\_$me1) &
done
done
  • (...) 表示我们在子 shell 中执行我们的指令。变量声明或 cd 等更改在此上下文中有效,但不会影响我们的主脚本环境。
    • 我们将需要并行化的全部操作放在这个子 shell 中。我们需要将所有相关信息放在这个上下文中。
    • 我们将完整的子 shell 并行化。

关于您的脚本的一些注意事项:我删除了一个 useless use of cat , 在使用并行计算时还要注意同一文件中的并发写入。

关于linux - 我如何使用 bash 脚本在后台执行 grep 链命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40890893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com