您的位置:首页 > 其它

一些自己处理数据的脚本

2015-04-03 20:17 197 查看
写给自己的总结(对大家没有帮助)

1. kaldi实验,获得exp下所有实验训练时迭代l的所有log文件帧准确率等,并且记录实验的名字等,成为所需的格式。

#!/bin/bash

exp=mfcc_exp_mono/exp
first=lstm_s12
first="d3cec1024r800tg0sp0_5_1lr0.001hf0.3"
for x in $exp/*${first}* ;  do
if [ -d $x ] ;then
echo dir: $x
for decode in  $x/log/iter*.log ; do
if [ -f $decode ] ;then
echo file: $decode
avgloss=$(cat $decode | grep "AvgLoss:" | tail -n 1 | awk '{ print $4; }')
frame_acc=$(cat $decode | grep "FRAME_ACCURACY" | tail -n 1 | awk '{ print $3; }')
echo "AvgLoss: "$avgloss
echo "FRAME_ACCURACY: "$frame_acc
echo
fi
done
echo
fi
done

2.将上面处理过的文件,转成能够直接使用jqplot的格式(最后只需要复制过去就行)

起初代码想了很久,能处理多个文件,内容设计中文的支持,DIR的使用,文件的读写(有很多小技巧,当时是过年在家写的)。 后来改为只处理一个文件,简洁,同时临时定义了一个函数,大大简化了程序

# -*- coding:utf-8 -*-

#ARGV其实是可以接受命令行变量的,但是必须要这样 ruby -w xxx.rb ...  -w 可以不加
#__FILE__ 中文目录下,这个根本不行 #filename=File.expand_path(filename,__FILE__)
#filename="../experiments/*.txt"
#Dir[filename].each do |fname|
#exepath.force_encoding("UTF-8")
filenames=["a.txt"]  #多个文件就放在数组里面
resultfile="my_result.txt"
rsfile_=File.open(resultfile,"w+")

cnt=10 #div id的起始

filenames.each do |fname|
#puts file 文件名
# 带有block后打开就不用关闭了
rsfile_.puts "------"+fname

File.open(fname.force_encoding("UTF-8"),"r") do |file|
cont_dir=""
cont_FRAME_ACCURACY=[[],[]]
tr_cv=0

#想了很久终于解决了我想解决的问题,就是连变量都可以共享 一般的def是不行的
define_method :puts_to_file_code do
if cont_FRAME_ACCURACY[0].length!=0
rsfile_.puts "---"+cont_dir #把目录名输入
#-----------专门针对jqplot的--------------#
cnt+=1
rsfile_.puts "<div id=\"chart#{cnt}\" class=\"lx_chart\" ></div>"
rsfile_.puts "<script>"
rsfile_.puts "drawchart(\"chart#{cnt}\",["
tmpdata="  ["
cont_FRAME_ACCURACY[0].each {|frame|
tmpdata+=frame+","
}
tmpdata+="],"
rsfile_.puts tmpdata

tmpdata="  ["
cont_FRAME_ACCURACY[1].each {|frame|
tmpdata+=frame+","
}
tmpdata+="],"
rsfile_.puts tmpdata
rsfile_.puts "],["
rsfile_.puts "    {label:'tr:#{cont_dir}'},"
rsfile_.puts "    {label:'cv:#{cont_dir}'},"
rsfile_.puts "])"
rsfile_.puts "</script>"

rsfile_.puts
end
end

while line=file.gets
next if line.strip=="" #去除回车后
#puts line
#puts line=~/dir/
if line=~/^dir:.*\/(.*)$/
puts_to_file_code

cont_dir=$1
cont_FRAME_ACCURACY=[[],[]]
elsif line=~/^file:.*initial\.log/
tr_cv=100
elsif line=~/^file:.*tr\./
tr_cv=0
elsif line=~/^file:.*cv\./
tr_cv=1
elsif line=~/^FRAME_ACCURACY:\s*(\d+\.?\d*)%$/
next if tr_cv>2
#puts $1
cont_FRAME_ACCURACY[tr_cv].push $1
end
end
puts_to_file_code
end

end
rsfile_.close

3. 处理wer得到自己关注的内容

这里用到 文件读写,字符串分割,及接受程序传参等

argv=ARGV
fin,fout="in.txt","out.txt"
if argv.length==2
fin,fout=argv[0],argv[1]
elsif argv.length==1
fin=argv[0]
end
#p fin,fout
fpin,fpout=File.open(fin,"r"),File.open(fout,"w+");

while line=fpin.gets
sz=line.split /\|/
fpout.print sz[0],sz[-1]
fpout.puts
end

fpin.close
fpout.close
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: