1. 程式人生 > >linux uniq sort 排重、排序

linux uniq sort 排重、排序

有如下檔案a.txt

[[email protected]] /ftproot# cat a.txt
ttt|000001
uuu|000002
uuu|000002
uuu|000002
uuu|000002
1
2
3
4
5
6
7
77
8
9
9

=====================================

#cat a.txt | uniq -c -i | sort -k2 -n          排重,排重輸出的第二列正序排列
#cat a.txt | uniq -c -i | sort -k2 -rn         排重,排重輸出的第二列逆序排列

uniq 引數解釋

     -c 統計重複數量


     -c      Precede each output line with the count of the number of times
             the line occurred in the input, followed by a single space.

     -d      Only output lines that are repeated in the input.

     -f num  Ignore the first num fields in each input line when doing compar-
             isons.  A field is a string of non-blank characters separated
             from adjacent fields by blanks.  Field numbers are one based,
             i.e., the first field is field one.

     -s chars
             Ignore the first chars characters in each input line when doing
             comparisons.  If specified in conjunction with the -f option, the
             first chars characters after the first num fields will be
             ignored.  Character numbers are one based, i.e., the first char-
             acter is character one.

     -u      Only output lines that are not repeated in the input.

     -i      Case insensitive comparison of lines.

=============================================================================

linux關於sort命令的高階用法(按多個列值進行排列)

如果單純地使用sort按行進行排序比較簡單,

但是使用sort按多個列值排列,同時使用tab作為分隔符,而且對於某些列需要進行逆序排列,這樣sort命令寫起來就比較麻煩了

比如下面的檔案內容,使用[TAB]進行分割:

Group-ID   Category-ID   Text        Frequency
----------------------------------------------
200        1000          oranges     10
200        900           bananas     5
200        1000          pears       8
200        1000          lemons      10
200        900           figs        4
190        700           grapes      17

下面使用這些列進行排序(列4在列3之前進行排序,而且列4是逆序排列)

    * Group ID (integer)
    * Category ID (integer)
    * Frequency “sorted in reverse order” (integer)
    * Text (alpha-numeric)

排序後的結果應該為:

Group-ID   Category-ID   Text        Frequency
----------------------------------------------
190        700           grapes      17
200        900           bananas     5
200        900           figs        4
200        1000          lemons      10
200        1000          oranges     10
200        1000          pears       8

可以直接使用sort命令來解決這個問題:

BASH CODE
sort -t $'\t' -k 1n,1 -k 2n,2 -k4rn,4 -k3,3 <my-file>

解釋如下:

-t $'\t':指定TAB為分隔符
-k 1, 1: 按照第一列的值進行排序,如果只有一個1的話,相當於告訴sort從第一列開始直接到行尾排列
n:代表是數字順序,預設情況下市字典序,如10<2
r: reverse 逆序排列,預設情況下市正序排列

所以最後的命令:sort -t $’\t’ -k 1n,1 -k 2n,2 -k4rn,4 -k3,3 my-file


相關推薦

linux uniq sort 排序

有如下檔案a.txt [[email protected]] /ftproot# cat a.txt ttt|000001 uuu|000002 uuu|000002 uuu|000002 uuu|000002 1 2 3 4 5 6 7 77 8 9 9 ===

elastic search6.2.2 實現用戶搜索記錄查詢(去排序

replicas pos 結果 etime rep col cas rms idt elastic search6.2.2 實現搜索記錄查詢 ,類似新浪微博這種,同樣的搜索記錄後面時間點的會覆蓋前面的(主要思路:關鍵詞去重,然後按時間排序) 先創建索引 //我的搜索

計算機網路實驗(二)之Wireshark抓包分析獲取URL列表(去排序統計)

實驗要求 本試驗要求基於第一次實驗中訪問某官網主頁時所抓取到的資料包,用Python 3語言、Jupyter Notebook和Pyshark編寫程式碼進行協議分析所需的開發環境,編寫程式碼,以輸出的方式列出首頁以及其所包含的所有資源(至少包含如下型別

Linux Shell -- sort(按照指定列排序)

file.txt 文字如下: 110,1|1,10 110,1|2,101 110,3|1,103 110,4|1,16 110,5|1,12 112,1|1,10 112,1|2,101 112,2|1,103 110,6|1,11 104

List去排序操作

// list元素去重 HashSet h = new HashSet(list); list.clear(); list.addAll(h); // list元素屬性

c++中set的使用:初始化和去排序

1.set的初始化可以直接用迭代器,set的定義和初始化方式包括: set<T> s;set<T> s(s1);set<T> s(b, e); 其中,b和e分別為迭代器的開始和結束的標記。 例如: #include <stdi

linux Shell sort按照指定列排序

文字如下: 110,1|1,10 110,1|2,101 110,3|1,103 110,4|1,16 110,5|1,12 112,1|1,10 112,1|2,101 112,2|1

Python中的列表,元祖,集合,字典,字串進行去排序翻轉操作

1.列表的操作 -list進行去重操作有如下幾種方法 v1:使用set方法,簡單有效,但是不能保證list內順序不變 list2 = [1,2,3,3,4,2,1,3,4] list2 = list(set(list2)) v2:使用新的一個空列

Linux命令去統計排序(awk命令去sort, uniq命令去統計)

awk命令去重,sort, uniq命令去重統計 利用Linux命令列進行文字按行去重並按重複次數排序 linux命令列提供了非常強大的文字處理功能,組合利用linux命令能實現好多強大的功能。本文這裡舉例說明如何利用Linux命令列進行文字按行去重並按

Linuxsortuniqwccut 隨筆

inf 多少 單位 alt 相同 大小寫 文字 tab -c sort 命令 對 File 參數指定的文件中的行排序,並將結果寫到標準輸出。如果 File 參數指定多個文件,那麽 sort 命令將這些文件連接起來,並當作一個文件進行排序。 選項與參數:-f :忽略大小寫的

Linux學習——管道命令文字提取命令排序命令雙向導向字元轉換命令分割命令引數代換

目錄   管道命令 文字提取命令:cut、grep cut grep 排序命令:sort、wc、uniq sort uniq wc 雙向重導向:tee 字元轉換命令 tr col join paste expand 分割命

linux中的統計排序sort

wc、sort、uniq這三個命令都是用於排序。 sort sort可以依據不同的資料型別進行排序。可以用於對列印的結果進行排序,也可以直接對一個文字檔案的內容按照行為單位進行排序。 格式: sort [-fbMnrtuk] file or stdin 常用引數詳解: -

sort對輸出行排序

原來不太會使用sort的使用進行排重處理使用的是uniq。可是使用uniq的前提是待處理檔案的行必須是有序的。所以經常這樣寫:sort file | uniq今天man sort了下,發現使用sort的u選項就可以做到拍重。即:sort -u file

Hadoop—MapReduce練習(資料去資料排序平均成績索引)

1.  wordcount程式 先以簡單的wordcount為例。 Mapper: package cn.nuc.hadoop.mapreduce.wordcount; import java.io.IOException; import org.apache.com

Linux awk+uniq+sort 統計檔案中某字串出現次數並排序

    在伺服器開發中,我們經常會寫入大量的日誌檔案。有時候我們需要對這些日誌檔案進行統計。Linux中我們可以利用以下命令簡單高效的實現這一功能。 需要用到的命令簡介 cat命令 cat命令主要有三大功能 1.一次顯示整個檔案 cat file

ACM:一種排序(操作符過載vector

一種排序 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3 描述現在有很多長方形,每一個長方形都有一個編號,這個編號可以重複;還知道這個長方形的寬和長,編號、長、寬都是整數;現在要求按照一下方式排序(預設排序規則都是從小到大); 1.按照編

Linux學習筆記之管道定向與正則表達式

linux管道與重定向 linux學習筆記 linux 正則表達式 管道:前一個命令的輸出,作為後一個命令的輸入命令1 | 命令2 | 命令3| 命令4 #tee 即在顯示器顯示,又在文件在保存文件例#echo “hello ,word” | tee /tmp/ hello.out例#wc -l

Linux系統中查找刪除復文件,釋放磁盤空間。

apt-get 簡單 模式 快速 文件中查找 名稱 lease 遞歸 工具 在Linux系操作系統中查找並刪除重復文件的方法的確有很多,不過這裏介紹的是一款非常簡單實用的軟件FSlint。FSlint是一個重復文件查找工具,可以使用它來清除不必要的重復文件,筆者經常使用它來

quick sort / quick select sort / 快速選擇排序

快速排序(快排)和快速選擇排序,是兩種平均時間複雜度非常高效的演算法,其中: 快排平均時間複雜度是O(nlogn),最壞時間複雜度是O( n2 n 2

JAVA實現冒泡歸併希爾快速插入簡單選擇排序演算法

氣泡排序 public void bubbleSort(int []nums) { int exchange=nums.length-1; while(exchange!=0) { int bound=exchange; exchange=0; for(i