sort命令

最近统计线上log比较多,每次都用到sort,但是发现没有完全理解sort这个命令

1、问题一: 排序后存放在另一个文件中

sort -k 2 -k 3 login.txt > login.log

自己通过后缀区分排序后的文件,这样做也有好处可以做个备份,其实不想要备份的时候可以用 -o

sort -k2 -k3 login.txt -o login.txt

sort -k2 -k3 login.txt -o login.log

2、问题二:我想已第二列去重

cat login.txt | awk '{arr[$2]=$0}END{for(a in arr)print arr[a];}'

其实这个有点麻烦了

sort -k2,2 -u log 

-k2 是不行的,因为-k2 他会比较从第2列开始到最后的最后

要继续往下深入的话,就不得不来点理论知识。你需要了解-k选项的语法格式,如下:

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。

先给你灌输一个思想,那就是“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。

Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。

C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。

FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。

同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。
原文地址:https://www.cnblogs.com/bai-jimmy/p/4459988.html