纯文本数据处理的实用脚本(bash,awk)

计算最大字段长度

典型用途:csv文件导入到数据库时,用于规划字段长度

$ cat file.csv |awk -F "," -v fields_count=10 'BEGIN{for(i=1;i<=fields_count;i++){xcount[i]=0}} {for(i=1;i<=fields_count;i++){if(xcount[i]<length($i) ){xcount[i]=length($i)}}} END{for(i=1;i<=fields_count;i++){print i,xcount[i]}}'

合并将当前目录下所有.csv文件,只保留惟一的首行

典型用途:一系列csv文件,列完全一致,首行是列名;需要将它们合并后做后期处理,通常我们只要保留一个列名行即可。

要求:1) 所有csv文件结尾是空行,否则接合处坏掉;标准的csv文件结尾会有个空行的。 2) 不能有字段内换行符;即字符内换行符需要转义,而不是excel生成的csv文件那样操蛋的转义规则(不转义换行符;用两个并列双引号转义双引号)

head -1 `ls *.csv |grep -v "all.csv" |head -1` >all.csv; total=0;for file in `ls -d *.csv|grep -v 'all.csv'`; do echo -n $file '    '; n=`wc -l $file |awk '{print $1}' `;n=$((n-1));total=$((total+n));echo -n $n 'lines...    ';tail -$n $file >>all.csv;echo ' done'; done; echo 'total lines:    ' $total

实现方法简述:找一个csv文件,将第首行写到all.csv中,然后遍历所有csv文件(除all.csv外),计算行数,将行数减1,将结尾的这么多行追加到all.csv中

cygwin下python环境一些包的踩坑记录

坚持使用cygwin下的python,只有一个原因,要使用cygwin环境下unix/gnu-linux工具;但,毕竟cygwin不是真正的unix/linux,有一些问题貌似无法解决的,钻牛角尖折腾半天,结果还是失败,所以有必要做个踩坑记录,或者也可以说是踩雷记录。

貌似无解的一些包

psutil

[psutil (process and system utilities) is a cross-platform library for retrieving information on running processes and system utilization (CPU, memory, ...] 不支持信息参看,其github上的讨论贴 https://github.com/giampaolo/psutil/issues/82

依赖它的一些包,就不要指望安装了,即使装上运行,结果也有可能异常,如 scipy, matplotlib, scipy, scikit-learn,

不过,因为cygwin本身包含了matplotlib 包,可以使用它安装,如果是venv环境,把安装后的文件从 site-packages 里拷到venv下使用,经验上应该没有什么问题。如果运行中提示缺少依赖包(至少包括 mpl_toolkits)也要同步拷过来 。

 

cygwin:生存指南(简介,安装,使用,技巧)

前言

cygwin是让windows获得unix/linux部分功能的一个神器,本文是个人的一些经验,推荐初学者参考。有一经验的读者也可参阅斧正。

cygwin是什么?

cygwin是运行在windows下的GNU/linux环境,包含了几乎所有的常用Linux软件,使用上跟linux高度一致。由RedHat主导开发。cygwin官网

cygwin安装

到cygwin官网上下载安装程序: setup-x86.exe (32-bit ) or setup-x86_64.exe (64-bit )。双击运行,有安装向导,照做即行。

其中有两个路径一个url,有必要关注一下:

Root Directory, cygwin将安装到这个目录,推荐装到 D:\cygwin  (原因:重装windows通常不影响D盘;目录层级浅,找起来方便)

Local Package Directory, 安装向导下载的安装包存储路径,放到 F:\cygwin_download  或你希望的目录,cygwin安装后其中的文件就可以删除了,不过如果硬盘有空间,留着也不多,毕竟下次添加/更新安装包时,有可能还用得着。另外安装程序 setup-x86.exe 或 setup-x86_64.exe 也推荐放到这个目录里,cygwin里添加/删除包时还要用它(它相当于yum/apt-get,不过是gui版的,不是cli)

Choose A Download Site, 为了更快的下载安装包,推荐选择国内的镜像站点,自行添加镜像url也是可以的,比如下面这几个:

  • http://mirrors.neusoft.edu.cn/
  • http://mirrors.ustc.edu.cn/
  • http://mirrors.aliyun.com/
  • http://mirrors.163.com/

安装后,默认会在桌面放一个图标,可以将该快捷方式复制到你习惯的地方,比如快速启动栏。

默认情况下,cygwin只安装要最小化的环境,需要装哪些软件,使用 setup-x86.exe 或 setup-x86_64.exe安装器另外安装。

cygwin使用

点桌面图标快捷方式,进入cygwin命令行窗口,假装你在linux下,尽情使用吧,因为绝大多数操作都是兼容的。

cygwin文件系统与windows目录之间的对应

  • cygwin的根目录,其实就是cygwin安装目录,按前面的目录就是 D:\cygwin.
  • windows下的盘符,已被挂载到 /cygdrive/c, /cygdrive/d, /cygdrive/x ...

实用技巧

  • cygwin窗口里,鼠标圈选的,就自动复制到windows剪贴板。
  • Shift + Insert,从windows剪贴板粘贴。
  • 双击自动选择连续内容,很方便。
  • 单引号括起来的windows风格的路径。举例快速进入目录 F:\software\tools 可以这样  cd 'F:\software\tools'
  • Ctrl + 鼠标滚轮,调整字体大小。
  • 窗口标题栏点右键 - Option, 还有一系列选项。

一些事实

  • 需要注意的是,cygwin下的软件,都是.exe格式的,原生的linux二进制文件是不能运行的。如果cygwin里没有要用的软件,可以尝试在cygwin下从源码编译。

一些经验

  • cygwin本身是支持x-window的,不过效果实在不怎么样,使用还很烦琐;我想你肯定看不下去、而且用不下去的。所以,不推荐安装图形化的工具了,占磁盘空间而用又没用。如果你使用gitk以图形化查git历史的话,参考 在cygwin里调用windows版git-scm的gitk/git-scm与cygwin协同工作
  • 网上有些文章建议把cygwin目录加入到windows环境变量,不推荐修改,毕竟cygwin与windows的cmd是不同的东西,混用会有些乱,有可能带来莫名其妙的问题。
  • 可以通过 cd c: 进入windows的c盘,甚至可以通过 cd C:\tools 进入子目录;但列强反对这么用,使用windows风格的路径,请一定用单引号括起来。原因 反斜线在bash里当作转义符使用。这样 cd C:\tools 事实上相当于 cd C:tools,这样写cygwin认可。而cd c:\tools\disk相当于cd: c:toolsdisk,自然是错误的。
  • 默认情况下,windows的PATH环境变量,会被追加到cygwin的PATH环境变量中。于是,在cygwin下可以直接调用相关的windows程序。然而,这会造成一些麻烦。比如,安装过windows版ssh客户端,但没有安装cygwin版,在cygwin可以直接使用ssh,但它并不使用 ~/.ssh/下的密钥或匹配文件。这是自然而然的,并且是合理的,可如果不知道“是windows版ssh在工作”的这个事实,这会很令人困惑。