首页 > 解决方案 > 将循环合并到文件处理中

问题描述

我有几行看起来像这样的代码,尽管它只能处理一个文件(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.pdb5cymX_b.pdb5cymX_a .pdb5cymX_d.csv5cymX_b.csv5cymX_a.csv。谢谢!

标签: loopsawksed

解决方案


尝试这个:

#!/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

推荐阅读