格式化输出多个文件的关键信息——awk实现

涉及知识点:

1.程序很简单,主要是里面有一个格式化输出的语句需要记录

程序主体如下:

#可以实现的功能是:一键化提取当前目录下所有文件中的所要信息,并存到对应的txt文档中
BEGIN{
doc[1]="get_wenjian.txt"
sh[2]="get_wenjian.sh"
#————————————————————要提取出来的信息—————————————————#
keyword1="SCF Done"#电子能
keyword2="Sum of electronic and zero-point Energies"#零点能
keyword3="Sum of electronic and thermal Free Energies"#吉布斯自由能
keyword4="Frequencies"#频率
keyword5="Stoichiometry"#化学式
#————————————————————要提取出来的信息——————————————————#



#——————————————————————————————————————————————#
#代码块【1】
#作用:将该目录下的文件名保存到get_wenjian.txt中
system("pwd")
get_pwd=$0
system("touch -f " sh[2])
system("touch -f " doc[1])
printf "ls *.log %s > %s",get_pwd,doc[1] >sh[2]
system("sh " sh[2])
#——————————————————————————————————————————————#


#——————————————————————————————————————————————#
#代码块【2】
#作用:获取该目录下的文件数目以便后续循环存到数组中
for(i=1;i<100;i++)
{
 "cat get_wenjian.txt|awk '{print NR}'"|getline
 get_wenjian_number=$0
}
#——————————————————————————————————————————————#


#——————————————————————————————————————————————#
#代码块【3】
#作用:将该目录下的所有文件名放到wenjian_name[]数组中
for(i=1;i<=get_wenjian_number;i++)
{
 "cat get_wenjian.txt|awk '{print $1}'"|getline
 wenjian_name[i]=$0
}
#——————————————————————————————————————————————#



#——————————————————————————————————————————————#
#代码块【4】
#作用:提取信息
for(i=1;i<=get_wenjian_number;i++)
{
 "printf '"wenjian_name[i]"'|awk -F- '{printf $1}'"| getline
 mol_array[i]=$0
 "grep '"keyword1"' '"wenjian_name[i]"' | tail -1 |awk '{print $5}' "| getline
 keyword1_array[i]=$0
 "grep '"keyword2"' '"wenjian_name[i]"' | awk '{print $7}' " | getline
 keyword2_array[i]=$0
 "grep '"keyword3"' '"wenjian_name[i]"' | awk '{print $8}' " | getline
 keyword3_array[i]=$0
 "grep '"keyword4"' '"wenjian_name[i]"' | awk '{print $3}' " | getline
 keyword4_array[i]=$0
 "grep '"keyword5"' '"wenjian_name[i]"' | awk '{print $2}' " | getline
 keyword5_array[i]=$0
}
#——————————————————————————————————————————————#

#——————————————————————————————————————————————#
#代码块【5】
#作用:打印信息
print"————————————————————————————————————————"
printf"All structuters in 'r' type\n"
printf"Units: TE and TE_ZPE in a.u.; RE and RE_ZPE in kcal/mol;LF in cm-1\n"
printf"##########################################################################\n"
print"mol                   TE             TE_ZPE          TE_GFE       Fre       Stoichiometry"
count=0
for(i=1;i<=get_wenjian_number;i++)
{
 printf "%-15s%-20s%-15s%-15s%-15s%-15s\n",mol_array[i],keyword1_array[i],keyword2_array[i],keyword3_array[i],keyword4_array[i],keyword5_array[i]
 count=count+1
}
print "##########################################################################"
print "For system C2O2, 6 structures at the level of RB3LYP/6-31G(d)"
print"————————————————————————————————————————"
#——————————————————————————————————————————————#
print "本次一共输出了'"count"'个log文件的信息!"
system("rm " sh[2])
system("rm " doc[1])




#——————————————————————————————————————————————#
#代码块【6】
#作用:打印信息到TXT文件中
txt[1]="mol.txt"
txt[2]="TE.txt"
txt[3]="TE_ZPE.txt"
txt[4]="TE_GFE.txt"
txt[5]="Fre.txt"
txt[6]="Stoichiometry.txt"
for(i=1;i<=6;i++)
{
  system("touch -f " txt[i])
}

#————————————————————
for(i=1;i<=get_wenjian_number;i++)
{
  print mol_array[i]>txt[1]
}
for(i=1;i<=get_wenjian_number;i++)
{
  print keyword1_array[i]>txt[2]
}
for(i=1;i<=get_wenjian_number;i++)
{
  print keyword2_array[i]>txt[3]
}
for(i=1;i<=get_wenjian_number;i++)
{
  print keyword3_array[i]>txt[4]
}
for(i=1;i<=get_wenjian_number;i++)
{
  print keyword4_array[i]>txt[5]
}
for(i=1;i<=get_wenjian_number;i++)
{
  print keyword5_array[i]>txt[6]
}

#————————————————————


}

最终呈现结果如下图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值