一个关于awk命令和sort命令的小例子

来源:互联网 发布:ubuntu c ide 编辑:程序博客网 时间:2024/06/05 05:07

假设现在有如下一个txt的文本记录:

a|b|c|150203161843.289|||1|2|c|150203161843.300|||a|m|c|150203161943.289||||b|c|150203162843.289|||a||c|150203171843.289|||

按|分割后的第四个域表示的时间,假设现在需要把第四个域单独提取到一个文件中,那么使用下面的命令即可完成:

cat test.txt | awk -F "|" '{print $4}' 

结果如下:

150203161843.289150203161843.300150203161943.289150203162843.289150203171843.289

-F指定列的分隔符,这里的|是shell中的元字符,因此需要使用双引号,然后打印第四列即可。非常简单但是实用的用法。

如果要输出到一个文件直接重定向到该文件即可。如果要对输出的结果按照从大到小的顺序排序,直接再通过管道命令用sort排序即可

cat test.txt | awk -F "|" '{print $4}' | sort -n -r

-n指定以数字方式-r是逆序也就是从大到小。

如果我们要打印时间字段大于150203161843.300的行那么又该如何实现呢?同样非常简单

cat test.txt | awk -F "|" '($4>150203161843.300){print $4}'

只是多了($4>150203161843.300)这里是个条件表达式表示如果满足则执行后面的{}中的逻辑。这里也可以使用类c语言的风格使用if(){}else{}。


sort命令很明显是用来排序的,提供了非常灵活的排序方式,还是拿上面的例子,如果需要按照第四列时间进行排序,则可以写成下面的命令

cat test.txt | sort -t "|" -k 4

-t的意思是指定列分隔符,-k指定按照哪一列进行排序-k 4是指定第四列,如果还需要根据第一列,则可以继续-k。sort功能还包括去重甚至从某一列的第几个字符开始比较,功能也是很强大的。



0 0
原创粉丝点击