开发者社区 问答 正文

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

我在一个文件夹中有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个

展开
收起
祖安文状元 2020-01-06 16:29:20 429 分享 版权
1 条回答
写回答
取消 提交回答
  • 我认为您需要像这样引用它:

    parallel bedtools intersect -a {1} -b {2} -c \| awk \'{sum+=\$4} END{print sum+0}\' \> {1}.{2}.intersect ::: *tsv ::: *tsv
    
    2020-01-06 16:29:33
    赞同 展开评论
问答分类:
问答地址: