gpt4 book ai didi

linux - 在并行处理中使用 awk 获取语法错误

转载 作者:IT王子 更新时间:2023-10-29 01:04:33 26 4
gpt4 key购买 nike

我在一个文件夹中有 44 个 .tsv 文件,我想使用 bedtools 工具的 intersect 命令计算每对的相交数。每个输出文件都有 4 列,我只需要在每个输出文件中保存第 4 列的值之和。当我一个一个地完成时我可以很容易地完成,但是当我使用并行处理同时完成整个过程时我得到语法错误

这是我手动尝试每两对一对一时的代码和结果

$ bedtools intersect -a p1.tsv -b p2.tsv -c

chr1 1 5 1

chr1 8 12 1

chr1 18 20 1

chr1 21 25 0

bedtools intersect -a p1.tsv -b p2.tsv -c | awk '{sum+=$4} END {print sum}

3

这是我使用并行处理时的代码和结果

$ parallel "bedtools intersect -a {1} -b {2} -c |awk '{sum+=$4} END {print sum}'> {1}.{2}.intersect" ::: `ls *.tsv` ::: `ls *.tsv`

awk: cmd. line:1:{sum+=} END {print sum}
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1:{sum+=} END {print sum}
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1:{sum+=} END {print sum}
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1:{sum+=} END {print sum}
awk: cmd. line:1: ^ syntax error

结果应该是 44*44 的文件,其中包含一个单值示例,例如 3

最佳答案

@DudiBoy 有一个很好的解决方案。但对我来说,仅仅因为我想调用 GNU Parallel 而不得不制作另一个文件是很烦人的。

所以你也可以使用函数。这样你就不需要制作新文件了:

doit() {
bedtools intersect -a "$1" -b "$2" -c | awk '{sum+=$4} END {print sum}'
}
export -f doit

parallel --results {1}.{2}.intersect doit {1} {2} ::: *.tsv ::: *.tsv

关于linux - 在并行处理中使用 awk 获取语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56846032/

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