I'm new to using bash for piping. I'm currently trying to combine (pipe) multiple Piccard commands with Bash.
I have two executions that both work when I run them one by one in a bash script:
**********************************************
Command 1
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outpath="PATH/out"
for i in Bam1 Bam2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=$outpath/"$i" SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT
done
Command 2
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outpath="PATH/out"
outpath2="PATH/out2"
for i in Bam1 Bam2
do
java -jar $picardtools AddOrReplaceReadGroups INPUT=$outpath/"$i" OUTPUT=$outpath2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
**********************************************
I have now tried to pipe these commands, but it no longer works. I have tried 2 ways of doing the piping:
Option 1:
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outpath="PATH/out"
outpath2="PATH/out2"
for i in Bam1 Bam2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=/dev/stdout SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT | \
java -jar $picardtools AddOrReplaceReadGroups INPUT=/dev/stdin OUTPUT=$outpath2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
Option 2:
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outpath="PATH/out"
outpath2="PATH/out2"
for i in Bam1 Bam2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=$outpath/"$i" SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT
java -jar $picardtools AddOrReplaceReadGroups INPUT=$outpath/"$i" OUTPUT=$outpath2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
Neither of these two options work. Can someone help me finding the bug?
I have two executions that both work when I run them one by one in a bash script:
**********************************************
Command 1
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outpath="PATH/out"
for i in Bam1 Bam2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=$outpath/"$i" SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT
done
Command 2
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outpath="PATH/out"
outpath2="PATH/out2"
for i in Bam1 Bam2
do
java -jar $picardtools AddOrReplaceReadGroups INPUT=$outpath/"$i" OUTPUT=$outpath2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
**********************************************
I have now tried to pipe these commands, but it no longer works. I have tried 2 ways of doing the piping:
Option 1:
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outpath="PATH/out"
outpath2="PATH/out2"
for i in Bam1 Bam2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=/dev/stdout SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT | \
java -jar $picardtools AddOrReplaceReadGroups INPUT=/dev/stdin OUTPUT=$outpath2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
Option 2:
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outpath="PATH/out"
outpath2="PATH/out2"
for i in Bam1 Bam2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=$outpath/"$i" SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT
java -jar $picardtools AddOrReplaceReadGroups INPUT=$outpath/"$i" OUTPUT=$outpath2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
Neither of these two options work. Can someone help me finding the bug?