小编Ste*_*son的帖子

GNU 并行 vs &(我的意思是背景) vs xargs -P

我对.sh使用脚本在脚本中运行一组任务的区别或优势(如果有的话)感到困惑GNU parallel

例如Ole Tange的回答:

parallel ./pngout -s0 {} R{} ::: *.png
Run Code Online (Sandbox Code Playgroud)

而不是说通过它们循环将它们放在背景中&

例如froschutz的回答:

#copied from the link for illustration
for stuff in things
do
( something
  with
  stuff ) &
done
wait # for all the something with stuff
Run Code Online (Sandbox Code Playgroud)

简而言之,它们只是在语法上或实际上不同吗?如果实际上不同,我应该什么时候使用它们?

xargs shell-script background-process gnu-parallel

47
推荐指数
1
解决办法
2万
查看次数

如何运行并行进程并在完成后合并输出

我有一个 bash shell 脚本,我在其中通过大约 5 或 6 个不同的程序传输一些数据,然后将最终结果放入制表符分隔的文件中。

然后我对一个单独的类似数据集再次执行相同的操作并输出到第二个文件。

然后将这两个文件输入另一个程序进行比较分析。例如简化

Data1 | this | that |theother | grep |sed | awk |whatever > Data1Res.csv
Data2 | this | that |theother | grep |sed | awk |whatever > Data2Res.csv
AnalysisProg -i Data1res.csv Data2res.csv
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何使 step1 和 step2 同时运行(例如使用 &),但仅在两者都完成后才启动 step3(AnalysisProg)?

谢谢

ps AnalysisProg 不适用于流或 fifo。

scripting parallelism

17
推荐指数
2
解决办法
2万
查看次数

Bash,如何让一些后台进程运行但等待其他进程?

我有(又)其他wait&&&控制流的问题..

假设我有一个类似这样的脚本,我想同时做尽可能多的工作:

# may take some hours
something InputA > IrrelevantA &
something InputB > IrrelevantB &

# may take an hour
(
   somethingElse InputA > OutputA &
   somethingElse InputB > OutputB &
)&& combine OutputA OutputB > Result

...morestuff
Run Code Online (Sandbox Code Playgroud)

问题 1:在脚本中,是否combine在两个somethingElse进程都something继续的同时等待两个进程完成?

问题 2:如果没有 - 我怀疑它没有 - 我如何combine只等待两个somethingElse进程而something上述进程继续在后台工作?

shell shell-script background-process

12
推荐指数
2
解决办法
3万
查看次数

使用grep在一次通过中计算多个模式?

我已经编写了一个 grep 循环来迭代计算包含 DNA 序列的 gzip 压缩 DNA fasta 文件中的 DNA 三核苷酸,例如

declare -a tri=(AAA AAC AAG AAT CAA .. etc)

for i in ${tri[@]}
do
   gzip -cd gencode.v18.pc_transcripts.fa.gz | grep -v "^>" | grep -o $i | wc -l
done
Run Code Online (Sandbox Code Playgroud)

fasta 文件采用这种格式的位置(虽然要大得多)

head test.fa
>id1
TTTTTAAAAA
>id2
GGGGGCCCCC
etc..
Run Code Online (Sandbox Code Playgroud)

虽然这有效(即计算每个三核苷酸的出现次数),但在我看来效率很低,因为它必须通过数据 64 次(每个可能的三核苷酸一次)。

我的问题是如何使用bash或者grep有没有一种方法可以在一次通过文件时计算每个三核苷酸(因为文件非常大)?

谢谢

grep bash shell-script text-processing bioinformatics

5
推荐指数
1
解决办法
6086
查看次数

一次通过grep过滤和计数?

grep在一组管道命令的末尾使用来过滤文件中的一些行。之后我会想根据剩余的行数做一些算术运算。

例如

chrN="chr1|chr2|chr3|chr4|chr5|chr6|chr7"
otherCommands | grep -Ew $chrN  > $ChIP".bed"
count_pos=`wc -l $ChIP"bed" | awk '{print 1000000/$1}'`
Run Code Online (Sandbox Code Playgroud)

在将大量命令组合在一起然后将其写入文件然后再次读取它只是为了收集一个数字后,这让我感到非常浪费。..但我不知道该怎么做。

所以我的问题是如何将通过 grep 过滤器的行数保存到变量count_pos并将过滤后的行也保存到文件中?

grep bash pipe

2
推荐指数
2
解决办法
1333
查看次数