shell不排序去重

2021-06-21 10:23:37 字數 568 閱讀 9446

一條命令搞定:

awk '!a[$0]++' file

如果是第一次出現a[$0]++的值為0(假),而!a[$0]++的值就為1(真),之後就執行print $0

第二次或者兩次以上的出現a[$0]++的值就為大於0的整數值(真),例如1,2,3...,而!a[$0]++的值就為0(假),之後就不執行print $0操作

awk '!($0 in a)'

pattern為!($0 in a),action為

分析:1.執行第一行時的a的陣列為空,($0 in a)為假,!($0 in a)為真。執行action,a[$0]就存在了a[row1],列印第一行

2.執行第二行時的a的陣列為a[row1],如果a[row2] 是a[$0]中的元素,!($0 in a)為真為假,不執行ation。如果a[row2]不是a[$0]中的元素,執行action,a[$0]中增加元素(a[row1],a[row2]),列印第二行。

3.重複執行類似的第二步驟。達到的去重的效果。

A 排序去重

有n 個1 到 1000 之間的整數 對於其中重複的數字,只保留乙個,把其餘相同的數去掉。然後再按照指定的排序方式把這些數排序。第 1 行為字母 a 或 d,a 表示按照公升序排序,d 表示按照降序排序。第 2 行開始有若干個用乙個空格或換行符分隔的正整數。相互之間用乙個空格分隔的經去重和排序後的正...

linux uniq去重不生效

實現對nginx的訪問ip進行統計,出現出重不成功 shell cat access.log awk uniq c 原因 因為uniq去重只對相鄰的資料進行迭代處理,當遇到相鄰的資料不重複時,就會該處的資料加一,進行新的迭代處理。演算法過程如下 key 1 uniq file,key if line...

shell檔案合併去重

第一 兩個檔案的交集,並集 前提條件 每個檔案中不得有重複行 取出兩個檔案的並集 重複的行只保留乙份 取出兩個檔案的交集 只留下同時存在於兩個檔案中的檔案 刪除交集,留下其他的行 cat file1 file2 sort uniq file3 cat file1 file2 sort uniq d ...