Some Useful Shell Resources
1. 将20类的图片按照类别copy到相应的文件夹
最近在用Deep learning工具caffe,基于数据集VOC做一些实验,里边有20个Object Class,所以得到结果后经常会遇到重复处理20遍文件。因此写了一些脚本,用来执行重复操作。
a. 以训练(Train)图片为例,首先根据每一类的初始列表如cat_trainval.txt(20个相同类型文件):
000005 0
000023 1
…
(ImageID Label)
得到每一类正例(Label=1)的文件名列表*.list:
b. 将该20个文件(cat_trainval.txt.list,…,etc),批量重命名成cat.txt格式方便后边操作:
c. 开始分类copy:
2. 等待脚本:一旦某个条件符合,就执行特定操作
用GPU训练Caffe Model的时候,因为跟大家共享GPU资源,因此很多时候内存不够用,需要等待。简单写了个等待脚本,一旦发现GPU使用量有变化,就开始执行自己的task:
(每隔120s查询一次while循环条件,终止条件可以根据情况自定义)
3. Caffe训练的时候,直接把所有的输出都record下来了,设置的是每一个iter都有输出,想要得到如每40个iters的平均的loss曲线
4. 抽取某一个class如plant的feature,之后和其他class的ground truth结合成新的feature文件
在Train SVM model的时候,用了开源库liblinear,基于每一个class的输入图片list来抽取feature。
但是由于每个class的图片列表都相同,所以重复抽取feature不仅浪费时间而且没有意义,可以利用以下脚本组合成新的feature文件:
5. 对一个文件的某一列进行数值计算
有时会遇到某一列probability的ground truth打反了,需要将prob一列修改为1-prob:
6. 批量create20个class的lmdb文件
7. awkfile的应用:先匹配,再操作
对于稍复杂的操作,不便于在一行命令操作,可以创建awk file供awk命令使用,比如之前用到的一个:
8. 查看某个文件有多少列
某个文件很长,列数不规则,可以通过以下命令判断,最多的大概有多少列:
9. 删除文件特定行
10. vim中的匹配和替换
11. function 函数的使用
12. 批量杀死进程
13. 查看Linux内核版本或发布版本
14. 下载并安装某包
15. 批量重命名文件
某个文件夹下1.txt, 1000.txt, 批量重命名成000001.txt和001000.txt, 这样程序读取时可以按顺序
目录里包含很多子目录,每个子目录里有很多文件,将文件重命名将其目录名字加到前边
其中,注意awk需要external外部的变量时,需要用-v参数引入
16. 批量删除大小为0的文件
17. 双层循环,依次取每100行,刪除空行
18. 統計代碼文件行數
19. awk统计均值/最大值
20. 每隔10行统计一次均值,一共100行