用 shell 语言提取文件中的信息到另一个文件夹中

查找具有特定后缀的文件

#!/bin/sh
# find the pdb files at current files.
for i in `ls ./*.pdb`
do
	echo $i
done

提取文件中某个字符以及下面几行

提取文件中的文字

以前讲过,用grep 或者 gawk 都可以
grep的常用手法:

#!/bin/sh
grep "要提取的字符" *.txt     #提取该文件所有含有该字符的行
grep -i "要提取的字符" *.txt  #提取该文件所有含有该字符的行,不分大小写
grep -b "要提取的字符" *.txt  #提取该文件所有含有该字符的行,并且输出行号
grep -c "要提取的字符" *.txt  #汇总该文件出现这个关键词的行数的总数
grep "要提取的字符" -A n *.txt  #输出该文件出现这个的关键词以及后面的n-1行

gawk 的常用用法

#!/bin/shell
$absloading_mol_kg=`gawk '/Key Word \\[abc\\]/{printf \$6"\t"\$8"\t"}' '$file'`;  #在 /  /里面的特殊字符前面加两个\

如果有一个pdb 文件如下面所示
ZIF-71-CO2.pdb
MODEL 1
CRYST1 57.108 57.108 57.108 90.00 90.00 90.00
ATOM 1 O MOL 50.197 48.600 21.348 1.00 0.00 O
ATOM 2 C MOL 50.225 49.572 20.715 1.00 0.00 C
ATOM 3 O MOL 50.253 50.543 20.081 1.00 0.00 O
ENDMDL
MODEL 2
CRYST1 57.108 57.108 57.108 90.00 90.00 90.00
ATOM 1 O MOL 34.734 36.712 21.711 1.00 0.00 O
ATOM 2 C MOL 35.775 36.202 21.665 1.00 0.00 C
ATOM 3 O MOL 36.815 35.692 21.620 1.00 0.00 O
ENDMDL

将每个model 都分开写然后放入多个文件中

#!/bin/shell
for file in `ls *.pdb`
	do
	for cnt in "'MODEL    1'" "'MODEL    2'"
	do
	# grep 'MODEL    1'" -A 5 a.pdb > a-site-1.pdb
		echo "grep $cnt -A 5 $file > ${file%*.pdb}-site-${cnt:0-2:1}.pdb"
	done
done		

其中 ${file%*str} 的用法在之前的帖子上有说过
今天就总结到这里

#!/bin/sh

for i in `ls *K.pdb`
do
	echo $i
	for cnt in "'MODEL    1'" "'MODEL    2'" "'MODEL    3'" "'MODEL    4'" "'MODEL    5'" "'MODEL    6'" "'MODEL    7'" "'MODEL    8'" "'MODEL    9'" 
	# for cnt in "'MODEL   10'" "'MODEL   11'" "'MODEL   12'"  "'MODEL   13'" "'MODEL   14'" "'MODEL   15'" "'MODEL   16'" "'MODEL   17'" "'MODEL   18'" "'MODEL   19'" "'MODEL   20'"
	do
	#	 echo "grep $cnt -A 5 $i > ${i%*.pdb}-${cnt:0-3:2}.pdb"
		echo "grep $cnt -A 5 $i > ${i%*.pdb}-${cnt:0-2:1}.pdb"
	done
done

你可能感兴趣的:(编程语言,linux,bash)