включение цикла в обработку файлов - PullRequest
0 голосов
/ 10 мая 2019

У меня есть несколько строк кода, которые выглядят примерно так, хотя он может обрабатывать только один файл ( 5cym24.pdb ), т.е. :

grep -E 'TRP' 5cym24.pdb > 5cym24_d.pdb
grep -E 'CYS' 5cym24.pdb > 5cym24_b.pdb
sed -n '3030,3106p;3138,3205p;3238,3268p;3329,3361p;3423,3453p' 5cym24.pdb > 5cym24_a.pdb
awk '{$1=$1}1' OFS=, 5cym24_d.pdb > 5cym24_d.csv
awk '{$1=$1}1' OFS=, 5cym24_b.pdb > 5cym24_b.csv
awk '{$1=$1}1' OFS=, 5cym24_a.pdb > 5cym24_a.csv

У меня вопрос, как мне включить цикл таким образом, чтобы он обрабатывал множество pdb файлов, которые у меня есть, то есть , 5cymX.pdb , где X колеблется, например, от 24 до 70, таким образом генерируя 5cymX_d.pdb , 5cymX_b.pdb , 5cymX_a.pdb , 5cymX_d.csv , 5cymX_b.csv , 5cymX_a.csv .Спасибо!

Ответы [ 2 ]

1 голос
/ 10 мая 2019

попробуйте это:

#!/bin/bash

do_work() {
    grep -E 'TRP' "5cym$1.pdb" > "5cym$1_d.pdb"
    grep -E 'CYS' "5cym$1.pdb" > "5cym$1_b.pdb"
    sed -n '3030,3106p;3138,3205p;3238,3268p;3329,3361p;3423,3453p' "5cym$1.pdb" > "5cym$1_a.pdb"
    awk '{$1=$1}1' OFS=, "5cym$1_d.pdb" > "5cym$1_d.csv"
    awk '{$1=$1}1' OFS=, "5cym$1_b.pdb" > "5cym$1_b.csv"
    awk '{$1=$1}1' OFS=, "5cym$1_a.pdb" > "5cym$1_a.csv"
}

for i in $(seq 24 70); do
   do_work "$i"
done
0 голосов
/ 10 мая 2019

Ваш существующий код:

grep -E 'TRP' 5cym24.pdb > 5cym24_d.pdb
grep -E 'CYS' 5cym24.pdb > 5cym24_b.pdb
sed -n '3030,3106p;3138,3205p;3238,3268p;3329,3361p;3423,3453p' 5cym24.pdb > 5cym24_a.pdb
awk '{$1=$1}1' OFS=, 5cym24_d.pdb > 5cym24_d.csv
awk '{$1=$1}1' OFS=, 5cym24_b.pdb > 5cym24_b.csv
awk '{$1=$1}1' OFS=, 5cym24_a.pdb > 5cym24_a.csv

может быть уменьшен до 1 вызова awk (конечно, не проверено, поскольку вы не предоставили пример ввода / вывода для тестирования):

awk -v OFS=',' '
    FNR==1 {
        close(base"_a.csv")
        close(base"_b.csv")
        close(base"_d.csv")
        base = FILENAME
        sub(/\.pdb$/,"",base)
    }
    { $1=$1 }
    /TRP/ { print > (base"_d.csv") }
    /CYS/ { print > (base"_b.csv") }
    (FNR>=3030 && FNR<=3106) || (FNR>=3138 && FNR<=3205) || (FNR>=3238 && FNR<=3268) ||
    (FNR>=3329 && FNR<=3361) || (FNR>=3423 && FNR<=3453) { print > (base"_a.csv") }
' 5cym24.pdb

и, возможно, вы могли бы просто изменить 5cym24.pdb на *.pdb (или любой другой список входных файлов, которые вы хотите предоставить), и он просто работал бы как есть для всех ваших файлов одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...