我每天有24小时日志的数据。数据很大,可以抓住所需的字符串,需要3个小时才能在所有24小时DIR中搜索字符串。为了减少我决定将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序列执行,则
您错误地设计了paralell调用,并混合代码的paralell位以及主脚本中的调用。您可以尝试以下方法:
#!/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
-
(...)
表示我们在子壳中执行指令。在这种情况下,变量声明或cd
之类的变化是有效的,但不会影响我们的主要脚本环境。- 我们将需要在此子壳中列入的完整操作。我们需要将所有相关信息放在此上下文中。
- 我们将完整的子壳纳入。
有关您的脚本的一些注释:我删除了使用Paralell Computing时同一文件中的同一文件的无用使用。