计算化学公社
标题:
请教一个在bash shell下脚本变量读取赋值的问题
[打印本页]
作者Author:
终_焉
时间:
2018-1-19 12:47
标题:
请教一个在bash shell下脚本变量读取赋值的问题
大家好,我想请教一个关于bash shell脚本的问题。
通过非标准的IOp计算IRC,得到了每一步中的Mulliken电荷,希望将.log中的Mulliken电荷相关信息输出储存起来。
现在有如下思路:
#!/bin/sh
#获取每个.log中Mulliken charges的开头和结尾对应的行号,并储存至相应.txt文件
for i in $(ls *.log)
do
j=$(basename $i .log)
grep -n '^ Mulliken charges'>>$j.txt
done
复制代码
txt中的内容如下
<div>1366: Mulliken charges:
1415: Mulliken chargeswith hydrogens summed into heavy atoms:</div><div>`````````</div><div>`````````
3813: Mulliken charges:
3862: Mulliken chargeswith hydrogens summed into heavy atoms:</div>
复制代码
希望通过for语句或者类似的循环语句实现:每次读取两行开头的数字并赋值给两个变量$l,$m,并通过
sed -n '$l,$mp' $i>$j_Result.txt
储存改内容至相应文件 ,现在不知道赋值要怎么实现,大家有什么办法吗?
不用shell script改用python实现也可以,大家有什么思路吗?谢谢大家。
作者Author:
万里云
时间:
2018-1-19 14:45
用awk。
举个例子:
l=$(awk 'NR==1 {print $1} xxxx.log)
mp=$(awk 'NR==2 {print $1} xxxx.log)
作者Author:
终_焉
时间:
2018-1-19 23:38
下面的代码可以实现将当前目录下的所有log文件中的Mulliken charges信息提取并储存到对应的文件名_Mulliken.txt中
#!/bin/sh
rm *.txt
for i in $(ls *.log)
do
j=$(basename $i .log)
grep -n "^ Mulliken" $i>>$j.txt
done
for i in $(ls *.txt)
do
j=$(basename $i .txt)
k=$(grep -c 'Mulliken' $i)
l=1
while (($l<=$k))
do
m=$(awk -F : 'NR=='$l' {print $1 }' $i)
let 'l++'
n=$(awk -F : 'NR=='$l' {print $1 }' $i)
let 'l++'
sed -n ''$m','$n'p' $j.log>>$j\_Mulliken.txt
echo >>$j\_Mulliken.txt
done
rm $i
done
复制代码
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3