计算化学公社

标题: 请教一个在bash shell下脚本变量读取赋值的问题 [打印本页]

作者
Author:
终_焉    时间: 2018-1-19 12:47
标题: 请教一个在bash shell下脚本变量读取赋值的问题
大家好,我想请教一个关于bash shell脚本的问题。
通过非标准的IOp计算IRC,得到了每一步中的Mulliken电荷,希望将.log中的Mulliken电荷相关信息输出储存起来。
现在有如下思路:
  1. #!/bin/sh
  2. #获取每个.log中Mulliken charges的开头和结尾对应的行号,并储存至相应.txt文件
  3. for i in $(ls *.log)
  4. do
  5. j=$(basename $i .log)
  6. grep -n '^ Mulliken charges'>>$j.txt
  7. done
复制代码

txt中的内容如下
  1. <div>1366: Mulliken charges:
  2. 1415: Mulliken chargeswith hydrogens summed into heavy atoms:</div><div>`````````</div><div>`````````
  3. 3813: Mulliken charges:
  4. 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中
  1. #!/bin/sh
  2. rm *.txt
  3. for i in $(ls *.log)
  4. do
  5. j=$(basename $i .log)
  6. grep -n  "^ Mulliken" $i>>$j.txt
  7. done

  8. for i in $(ls *.txt)
  9. do
  10. j=$(basename $i .txt)
  11. k=$(grep -c 'Mulliken' $i)
  12. l=1
  13. while (($l<=$k))
  14. do
  15. m=$(awk -F : 'NR=='$l' {print $1 }' $i)
  16. let 'l++'
  17. n=$(awk -F : 'NR=='$l' {print $1 }' $i)
  18. let 'l++'
  19. sed -n ''$m','$n'p' $j.log>>$j\_Mulliken.txt
  20. echo >>$j\_Mulliken.txt
  21. done
  22. rm $i
  23. done
复制代码





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3