linux下有很多神奇的命令行小工具,功能强大,使用灵活方便,学会使用它们可以让我们的工作简单而高效。
比如今天,我需要把一个csv格式的文件,从第二行开始,把每行的第一列取出来,保存在一个单独的文件中。之前遇到这样的任务,我会写一个java程序,读取文件的每一行,分解为数组,取出每一个元素,保存在一个list中,再写到另一个文件。虽说代码也比较简单,但是每次遇到这样的任务都要写一次,也相当不便。我发现linux下有两个小工具:sed
和awk
,处理这种操作非常方便。
但我现在是在windows下,怎么使用呢?好在这些小工具基本上都有windows的版本,很快就找到了。
下面编写命令:
cat c:\data\1.csv | sed "2,$p" -n | awk "BEGIN {FS=\",\"} print $1" > ids.txt
搞定。
简单说明一下,这一句其实是由三个命令组成,它们之间用”|“分隔开,“|“的作用是把前一个命令的输出转为下一个命令的输入。
cat c:\data\1.csv
读取1.csv文件的内容sed "2,$p" -n
输出第2行到最后awk "BEGIN {FS=\",\"} print $1"
设置逗号为分隔符,只打印每一行的第一个元素> ids.txt
把结果保存到1.txt文件中整个过程还是相当清晰明了的。特别是,sed和awk还有很多灵活的参数,可以组合在一起,实现更复杂一些的功能。相比使用java来写程序,不需要开编辑器,不需要配置,不需要编译,仅仅写一行命令即可,实在是太方便了。
注意看第3行,如果是在linux中,可以写成:
awk 'BEGIN {FS=","} print $1'
的,而不像windows下,只能使用双引号,中间的双引号还需要用\"
来转义一下,不太方便。