I'm new to Bash, but would like to use it.
I would like to pipe two Picard (GATK pipeline) commands using Bash. Each of these commands works fine when they are run as individual Bash scripts (see below). However, when I try to combine them within a single bash script, it no longer works. I really cannot find the bug though. Help is much appreciated.
BASH Script 1
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outSorted='PATH/outSorted'
for i in BamFile1 BamFile2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=$outSorted/"$i" SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT
done
BASH Script 2
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
outSorted='PATH/outSorted'
outSorted2='PATH/outSorted2'
for i in BamFile1 BamFile2
do
java -jar $picardtools AddOrReplaceReadGroups INPUT=$outSorted/$i OUTPUT=$outSorted2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
######################
Here my attempts to pipe the two Scripts into one. But neither of these attempts worked. Can you help me find out why?
Attempt 1
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outSorted='PATH/outSorted'
outSorted2='PATH/outSorted2'
for i in BamFile1 BamFile2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=$outSorted/"$i" SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT
java -jar $picardtools AddOrReplaceReadGroups INPUT=$outSorted/$i OUTPUT=$outSorted2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
Attempt 2
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outSorted2='PATH/outSorted2'
for i in BamFile1 BamFile2
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=$outSorted2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
I would like to pipe two Picard (GATK pipeline) commands using Bash. Each of these commands works fine when they are run as individual Bash scripts (see below). However, when I try to combine them within a single bash script, it no longer works. I really cannot find the bug though. Help is much appreciated.
BASH Script 1
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outSorted='PATH/outSorted'
for i in BamFile1 BamFile2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=$outSorted/"$i" SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT
done
BASH Script 2
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
outSorted='PATH/outSorted'
outSorted2='PATH/outSorted2'
for i in BamFile1 BamFile2
do
java -jar $picardtools AddOrReplaceReadGroups INPUT=$outSorted/$i OUTPUT=$outSorted2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
######################
Here my attempts to pipe the two Scripts into one. But neither of these attempts worked. Can you help me find out why?
Attempt 1
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outSorted='PATH/outSorted'
outSorted2='PATH/outSorted2'
for i in BamFile1 BamFile2
do
java -jar $picardtools SortSam INPUT=$bams/"$i" OUTPUT=$outSorted/"$i" SORT_ORDER=coordinate CREATE_INDEX=TRUE VALIDATION_STRINGENCY=LENIENT
java -jar $picardtools AddOrReplaceReadGroups INPUT=$outSorted/$i OUTPUT=$outSorted2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done
Attempt 2
#!/bin/bash
# Set paths
picardtools='PATH/picard.jar'
bams="PATH/BAM"
outSorted2='PATH/outSorted2'
for i in BamFile1 BamFile2
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=$outSorted2/"$i" SORT_ORDER=coordinate RGID="$i" RGLB="$i" RGPL=illumina RGPU="$i" RGSM="$i" CREATE_INDEX=True
done