2016-05-05 2 views
0

Я пытаюсь использовать bash для проверки целостности конкретной загрузки .bam файлов. Есть две части (bash 1), выполняющая команду для проверки файлов .bam, которая создает файлы .txt, и создает process.log. Эта часть работает отлично, я получаю ошибку в проверке каждого из файлов .txt на строку (SUCCESS), и если она найдена, то в process.log этот файл проверяется, если он не найден, то этот файл поврежден. В настоящее время терминал отображает состояние, а затем дает ошибку. Спасибо :).bash для проверки целостности типа файла и создания журнала

Баш часть 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) 

Баш часть 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"' 

файл, который создается для проверки УСПЕХА

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) 

ответ

1

Ошибки обусловлен простейшими из причин, в bash, если использовать один скобку [] оценить состояние, это не что иное, как неявный способ использования выражение bash test, которое расширяет $value как строку, содержащую пробелы, специальные символы в качестве отдельных параметров. Здесь вы оставили переменную неоднозначную, которая может быть расширена до нескольких параметров для некоторых случаев ошибок.

Все, что вам нужно сделать, это заключить эту переменную в двойные кавычки, чтобы она обрабатывалась как одна строка.

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

Я внес изменения, как было предложено, и я не получаю никаких ошибок, однако сценарий не заканчивается, он никогда не закрывается. Без файла журнала «done >>» «no output не приводит к журналу. Я также отредактирую свой пост с кодом. Большое спасибо :). – Chris

 Смежные вопросы

  • Нет связанных вопросов^_^