2016-08-10 20 views
0

すぐに利用可能な値を取得するために処理する必要があるいくつかの.pdbファイルがあります。私はすべてのコマンドを一緒に試してみるためにbashスクリプトを作っています。bashスクリプトがフリーズしています

このスクリプトについての私の具体的な質問は2つです:私は./myscript.bashを入力/入力して、Ubuntuの上で、コマンドラインでbashでそれを実行しようと、それが後に

  1. 私のスクリプトが凍結されます目的のファイルをフォルダに出力しません。このフリーズアップの原因となる可能性のあるスクリプトの間違いは何ですか?最後のコマンドで

  2. grep 'model*' $file >> $file"-confscore".txt 
    #command to keep only the 1-5 lines from each dir I want to keep that contain this full format " model1 -5.00 0.21+-0.05 19.9+-1.8  404  0.003 " then >> combinedcscore.txt 
    #Then reformat it to just "$dir model1 -5.00" >> newcombcscore.txt  
    

    私はbashで、このコマンドを記述するのか分かりません。最初に表示されるgrepは、任意のモデル*テキストを含む行を$ file ___。txtというファイルに出力します。私はgrepの下の#d行に含まれている特定の形式でこれを必要とします。私は使用を考えています:

    for files in $dirs; do 
    awk -F':' ' { print $dir model* firstvalueidk? }' >> newcombcscore.txt 
    

    私のawkの使用は正しいですか?

ここで参照するための完全なスクリプトは次のとおりです。

#! /usr/bin/env bash 

#Step 0 - Set up variables & navigate to app. directory 
set GETLOCATION = "~/Desktop/DCompartment/RolandoHT_Scripts/Perl_Scripts" 
set GETNAME = "get_right_pdb_format.pl" 
set SSLOCATION = "~/Desktop/DCompartment/RolandoHT_Scripts/Perl_Scripts" 
set SSNAME = "get_ss_dssp_itasser.pl" 
set PROTALOCATION = "~/Desktop/protAlign-master/" 
set dirs = ~/Videos/Proteins/* 


#Step 1 - Process PDB for readily available values 

for dir in $dirs; do 
rm `cscore|model*.pdb|seq.fasta` 
done 

for dir in $dirs; do 
for file in *.pdb; do 
perl $GETLOCATION/$GETNAME $file 
dssp -i $file"-fix" -o $file.dssp 
perl $SSLOCATION/$SSNAME $file.dssp $file"-out" 
done 

for file in $dirs/*.dssp; do 
grep 'ACCESSIBLE SURFACE OF PROTEIN' $file >> $file"-SASA".txt 
done 

for file in $dirs/*.txt; do 
echo "$file `cat $file`" >> $dir-combinedSASAs.txt 
done 
done 
#Step 2 - Set up tool 
for dir in $dirs; do 
./$PROTALOCATION/initialize.sh 
source $PROTALOCATION/bin/activate 
done 
#Step 3 - Start analyzing files 
for dir in $dirs; do 
for file in *.pdb; do 
./$PROTALOCATION/program_name.py $dir $dir/native.pdb $dir-SPAR 
done 
done 
for file in $dirs/data; do 
set filerep = native-*.txt 
grep 'TM-score' $filerep >> combinedreports.txt 
awk 'FNR%2' combinedreports.txt > newcombinedrep.txt 
done 

for dir in $dirs; do 
for file in cscore; do 
grep 'model*' $file >> $file"-confscore".txt 
#command to keep only the 1-5 lines from each dir I want to keep that contain this full format " model1 -5.00 0.21+-0.05 19.9+-1.8  404  0.003 " then >> combinedcscore.txt 
#Then reformat it to just "$dir model1 -5.00" >> newcombcscore.txt  
done 
done 
+4

見てみてください:bashでhttp://www.shellcheck.net/ – Cyrus

+4

'set'は(t)はcshの中set''として動作しません。 – choroba

+2

[\ [shellcheck \]](http://shellcheck.net)を使用してスクリプトをチェックするだけです。また 'for file in cscore'はあなたがしたいことではないかもしれません。 – sjsam

答えて

1

は、私はすべての変数が空であるため、スクリプトが凍結され、grepのようなコマンドがSTDINでブロックされていると思います!私はあなたのスクリプトをすばやく整理し、おそらく必要と思われるコード( "GLR"という接頭辞が付いている)を追加しました。これを学ぶと、それはあなたにもっと近づくはずです。

#!/bin/bash 

# Step 0 - Set up variables & navigate to app. directory 
GETLOCATION=~/Desktop/DCompartment/RolandoHT_Scripts/Perl_Scripts 
GETNAME=get_right_pdb_format.pl 
SSLOCATION=~/Desktop/DCompartment/RolandoHT_Scripts/Perl_Scripts 
SSNAME=get_ss_dssp_itasser.pl 
PROTALOCATION=~/Desktop/protAlign-master 
dirs=~/Videos/Proteins/* 


# GLR: uncomment the next line for debugging 
#set -x 


#Step 1 - Process PDB for readily available values 

for dir in $dirs; do 
    # GLR: Assume you want to change directory here? 
    pushd $dir 

    rm `cscore|model*.pdb|seq.fasta` 

    # GLR: back to original directory 
    popd 
done 


for dir in $dirs; do 
    # GLR: Assume you want to change directory here? 
    pushd $dir 

    for file in *.pdb; do 
     perl $GETLOCATION/$GETNAME $file 
     dssp -i ${file}-fix -o $file.dssp 
     perl $SSLOCATION/$SSNAME $file.dssp ${file}-out 
    done 

    for file in $dirs/*.dssp; do 
     grep 'ACCESSIBLE SURFACE OF PROTEIN' $file >> ${file}-SASA.txt 
    done 

    for file in $dirs/*.txt; do 
     echo "$file `cat $file`" >> $dir-combinedSASAs.txt 
    done 

    # GLR: back to original directory 
    popd 
done 


#Step 2 - Set up tool 
for dir in $dirs; do 
    # GLR: Assume you want to change directory here? 
    pushd $dir 

    ./$PROTALOCATION/initialize.sh 
    . $PROTALOCATION/bin/activate 

    # GLR: back to original directory 
    popd 
done 


#Step 3 - Start analyzing files 
for dir in $dirs; do 
    # GLR: Assume you want to change directory here? 
    pushd $dir 

    for file in *.pdb; do 
     ./$PROTALOCATION/program_name.py $dir $dir/native.pdb $dir-SPAR 
    done 

    # GLR: back to original directory 
    popd 
done 

# GLR: this won't do what you want 
#for file in $dirs/data; do 

for dir in $dirs; do 
    # GLR: Assume you want to change directory here? 
    pushd $dir/data 

    #;filerep=native-*.txt 
    #;grep 'TM-score' $filerep >> combinedreports.txt 

    grep 'TM-score' native-*.txt >> combinedreports.txt 
    awk 'FNR%2' combinedreports.txt > newcombinedrep.txt 

    # GLR: back to original directory 
    popd 
done 

for dir in $dirs; do 
    # GLR: Assume you want to change directory here? 
    pushd $dir 

    for file in cscore; do 
     grep 'model*' $file >> ${file}-confscore.txt 

     # command to keep only the 1-5 lines from each dir I want to keep 
     # that contain this full format 
     # " model1 -5.00 0.21+-0.05 19.9+-1.8  404  0.003 " 
     # then >> combinedcscore.txt 

     # Then reformat it to just "$dir model1 -5.00" >> newcombcscore.txt  
    done 

    # GLR: back to original directory 
    popd 
done 


exit 0 
関連する問題