Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2011-09-13) 使用linux下的命令简化工作

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

linux下有很多神奇的命令行小工具,功能强大,使用灵活方便,学会使用它们可以让我们的工作简单而高效。

比如今天,我需要把一个csv格式的文件,从第二行开始,把每行的第一列取出来,保存在一个单独的文件中。之前遇到这样的任务,我会写一个java程序,读取文件的每一行,分解为数组,取出每一个元素,保存在一个list中,再写到另一个文件。虽说代码也比较简单,但是每次遇到这样的任务都要写一次,也相当不便。我发现linux下有两个小工具:sedawk,处理这种操作非常方便。

但我现在是在windows下,怎么使用呢?好在这些小工具基本上都有windows的版本,很快就找到了。

下面编写命令:

cat c:\data\1.csv | sed "2,$p" -n | awk "BEGIN {FS=\",\"} print $1" > ids.txt 

搞定。

简单说明一下,这一句其实是由三个命令组成,它们之间用”|“分隔开,“|“的作用是把前一个命令的输出转为下一个命令的输入。

  1. cat c:\data\1.csv 读取1.csv文件的内容
  2. sed "2,$p" -n 输出第2行到最后
  3. awk "BEGIN {FS=\",\"} print $1" 设置逗号为分隔符,只打印每一行的第一个元素
  4. > ids.txt 把结果保存到1.txt文件中

整个过程还是相当清晰明了的。特别是,sed和awk还有很多灵活的参数,可以组合在一起,实现更复杂一些的功能。相比使用java来写程序,不需要开编辑器,不需要配置,不需要编译,仅仅写一行命令即可,实在是太方便了。

注意看第3行,如果是在linux中,可以写成:

awk 'BEGIN {FS=","} print $1'

的,而不像windows下,只能使用双引号,中间的双引号还需要用\"来转义一下,不太方便。

comments powered by Disqus