涉及知识点:
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]
}
#————————————————————
}
最终呈现结果如下图: