2016-05-05 3 views
0

Ich versuche bash zu verwenden, um die Integrität bestimmter Downloads .bam Dateien zu überprüfen. Es gibt zwei Teile (Bash 1) führt den Befehl zur Überprüfung der .bam Dateien, die .txt Dateien erstellt, und erstellt eine process.log. Dieser Teil funktioniert perfekt, was ich bekomme einen Fehler in Überprüfung jeder der .txt Dateien für eine Zeichenfolge (SUCCESS) und wenn es dann in der process.log gefunden wird, dass die Datei überprüft wird, wenn es nicht gefunden wird, dann ist diese Datei beschädigt. Derzeit zeigt das Terminal den Status an und gibt dann einen Fehler aus. Vielen Dank :).Bash, um die Integrität des Dateityps zu überprüfen und Protokoll zu erstellen

bash Teil 1

logfile=/home/cmccabe/Desktop/NGS/API/5-4-2016/process.log 
for f in /home/cmccabe/Desktop/NGS/API/5-4-2016/*.bam ; do 
echo "Start bam validation creation: $(date) - File: $f" 
bname=`basename $f` 
pref=${bname%%.bam} 
bam validate --in $f --verbose 2> /home/cmccabe/Desktop/NGS/API/5-4-2016/bam_validation/${pref}_validation.txt 
echo "End bam validation creation: $(date) - File: $f" 
done >> "$logfile" 
echo "Start verifying $(date) - File: $file" 
value=$(grep -ic "(SUCCESS)" /home/cmccabe/Desktop/NGS/API/5-4-2016/bam_validation/*.txt) 

bash Teil 2

if [ $value -eq 1 ] 
then 
echo "bam file is verified and complete" 
else 
echo "bam is corrupt, check log for reason" 
echo "End bam verify: $(date) - File: $f" 
fi 
done >> "$logfile" 

erorr

Start verifying Thu May 5 12:49:10 CDT 2016 - File: 
/home/cmccabe/Desktop/loop.sh: line 11: [: too many arguments 
bam is corrupt, check log for reason 
End bam verify: Thu May 5 12:49:10 CDT 2016 - File: /home/cmccabe/Desktop/NGS/API/5-4-2016/NA19240.bam 
/home/cmccabe/Desktop/loop.sh: line 18: syntax error near unexpected token `done' 
/home/cmccabe/Desktop/loop.sh: line 18: `done >> "$logfile"' 

Datei, die für den Erfolg zu überprüfen

Number of records read = 24723078 
Number of valid records = 24723078 

TotalReads(e6) 24.72 
MappedReads(e6) 24.57 
PairedReads(e6) 0.00 
ProperPair(e6) 0.00 
DuplicateReads(e6) 7.33 
QCFailureReads(e6) 0.00 

MappingRate(%) 99.38 
PairedReads(%) 0.00 
ProperPair(%) 0.00 
DupRate(%) 29.66 
QCFailRate(%) 0.00 

TotalBases(e6) 4332.46 
BasesInMappedReads(e6) 4325.68 
Returning: 0 (SUCCESS) 

Antwort

1

Der Fehler ist darauf zurückzuführen, einfachste der Gründe, in bash erstellt wird, wenn Sie eine einzelne Klammern [] verwenden, um einen Zustand zu bewerten, es ist nichts anderes als eine implizite Art der Verwendung Die Bash test Ausdruck, der die $value als Zeichenfolge mit Leerzeichen, Sonderzeichen als separate Parameter erweitert. Hier haben Sie die Variable mehrdeutig gelassen, die für einige Fehlerfälle auf mehrere Parameter erweitert werden könnte.

Sie müssen diese Variable nur in doppelte Anführungszeichen einschließen, so dass sie als eine einzige Zeichenfolge behandelt wird.

if [ "$value" == 1 ]; then 
+0

Ich machte die Änderung wie vorgeschlagen und ich bekomme keine Fehler, aber das Skript endet nicht, es schließt nie. Ohne die 'done >>" Logdatei "' ergibt sich keine Ausgabe im Log. Ich werde meinen Beitrag mit dem Code auch bearbeiten. Vielen Dank :). – Chris

Verwandte Themen