背景
查找日志的時(shí)候我們經(jīng)常需要獲取某個(gè)維度的信息,這個(gè)涉及到截取字段和排序了,比如按照?qǐng)?zhí)行時(shí)間排序。
sort 命令解析
sort的工作原理
sort將文件的每一行作為一個(gè)單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進(jìn)行比較,最后將他們按升序輸出。
如果想按照某一列排序,就需要把列分割出來 且指定某一列。 分割列通過參數(shù) -t '分隔符',指定某一列通過參數(shù) -k 列索引,比如 -k 4 -k 5就是先按第4列再按第5列排序。
面對(duì)sort命令我暫時(shí)提出問題:
1.如果有不可見的字符怎么辦?
2.大小寫怎么辦?
3.排序如何只取前面幾個(gè)。
對(duì)于這些問題如果sort有解決可以通過man sort解決
4.sort 支持特定領(lǐng)域的排序,比如按照月份排序等等。
man sort
-b, --ignore-leading-blanks
ignore leading blanks
-d, --dictionary-order
consider only blanks and alphanumeric characters
-f, --ignore-case
fold lower case to upper case characters
-n 按照數(shù)字排序 -t ','按照,分割 (-k 4 -k 5 先按第四列排序 再按第5 列排序)
默認(rèn):是按照整行比對(duì)排序,
樣例:讀取一個(gè)文件先按第2列降序排列再按第4列降序排列
[stlm@Develop-Mcp ~]$ cat 71000001_20170104.txt |sort -n -t ',' -k 2r -k 4r | head -10
20170104,17010450052451,REFUND,3,0,
20170104,17010450052405,REFUND,1,0,
20170104,17010450052385,SUCCESS,1200,0,
20170104,17010450052327,REFUND,1,0,
20170104,17010450052325,REFUND,1,0,
20170104,17010450052322,REFUND,1,0,
20170104,17010450052313,SUCCESS,11,0,
20170104,17010450051848,REFUND,10,0,
20170104,17010450051790,SUCCESS,1000,0,
20170104,17010450051786,REFUND,15000,0,