Shell腳本-uniq工具

一、前言

在 Linux/Unix 系統中,uniq 是一個非常實用的文本處理命令,用于對重復的行進行統計、去重和篩選。它通常與 sort 搭配使用,以實現高效的文本數據清洗與統計分析。

無論是做日志分析、訪問頻率統計,還是編寫自動化腳本,uniq 都是一個不可或缺的工具。

本文將帶你全面了解 uniq 工具的使用方式,包括:

? uniq 的基本語法與常用參數
? 如何統計重復行、去重輸出、查找唯一行
? uniq 在 Shell 腳本中的實戰應用
? 與其他文本處理命令的聯合使用
? 實際開發中的常見問題與優化建議

并通過完整的代碼示例幫助你快速上手并熟練掌握 uniq 的各種高級用法。

二、什么是 uniq?

uniq 是一個用于 過濾或報告重復行 的命令行工具。它默認只會比較 相鄰的行,因此常與 sort 結合使用。

? 典型用途包括:

場景示例
日志分析提取唯一的 IP 地址
數據統計統計某字段出現次數
自動化腳本快速去重輸出結果
訪問監控查找高頻訪問用戶
文件清理去除重復行

三、uniq 基礎語法

uniq [選項] [輸入文件] [輸出文件]

? 常用選項說明:

參數描述
-c顯示每行出現的次數
-d只顯示重復的行(每組只輸出一次)
-u只顯示唯一的行
-i忽略大小寫比較
-f N忽略前 N 個字段再比較
-s N忽略前 N 個字符再比較
-w N對每行前 N 個字符進行比較

四、uniq 使用示例

? 示例1:基礎去重輸出

echo -e "apple\nbanana\napple\norange" > fruits.txt
sort fruits.txt | uniq

輸出:

apple
banana
orange

?? 注意:uniq 只會合并相鄰的相同行,所以必須先排序!

? 示例2:統計每行出現次數(-c

sort fruits.txt | uniq -c

輸出:

      2 apple1 banana1 orange

? 示例3:只顯示重復行(-d

sort fruits.txt | uniq -d

輸出:

apple

? 示例4:只顯示唯一行(-u

sort fruits.txt | uniq -u

輸出:

banana
orange

? 示例5:忽略大小寫比較(-i

echo -e "Apple\napple\nBANANA" > mixed.txt
sort -f mixed.txt | uniq -i

輸出:

Apple
BANANA

五、uniq 在 Shell 腳本中的應用

? 示例1:統計訪問最多的 IP 地址

cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -n 10

輸出類似:

123 192.168.1.100
98 192.168.1.101
...

? 示例2:提取配置文件中的唯一變量名

grep '=' config.env | cut -d'=' -f1 | sort | uniq

輸出所有變量名并去重。

? 示例3:查找重復的用戶名(從?/etc/passwd

cut -d':' -f1 /etc/passwd | sort | uniq -d

輸出重復的用戶名(如果有的話)。

六、uniq 與其他命令的配合使用

? 示例1:統計訪問最多的 URL(uniq?+?cut?+?sort

cut -d'"' -f2 access.log | cut -d' ' -f2 | sort | uniq -c | sort -nr | head -n 10

輸出訪問最多的前 10 個 URL。

? 示例2:找出未被訪問的頁面(uniq?+?grep

comm -23 <(sort all_pages.txt) <(sort visited_pages.txt)

輸出在 all_pages.txt 中但不在 visited_pages.txt 中的頁面。

? 示例3:結合?awk?過濾特定數量的行

sort data.txt | uniq -c | awk '$1 >= 3'

輸出出現次數大于等于 3 的行。

七、uniq 使用技巧總結

技巧說明
? 總是先排序再使用?uniq否則無法識別非連續重復行
? 使用?-c?統計出現次數適用于訪問統計、頻率分析
? 使用?-d?提取重復項快速定位異常數據
? 使用?-u?提取唯一項快速獲取不重復數據
? 使用?-i?忽略大小寫更靈活匹配關鍵詞
? 結合?awk?過濾特定頻率的數據實現復雜邏輯
? 使用?comm?找出差異對比兩個文件內容

八、uniq 實戰案例匯總

? 案例1:從?/etc/passwd?提取唯一用戶名

cut -d':' -f1 /etc/passwd | sort | uniq

? 案例2:統計訪問最多的 IP 并排序

cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -n 10

? 案例3:找出兩個文件的交集

sort file1.txt file2.txt | uniq -d

九、常見問題與解決方法

問題原因解決方案
無法識別非連續重復行未使用?sort?排序添加?sort?再調用?uniq
去重無效使用了錯誤參數檢查是否使用了?-d?或?-u
輸出亂碼編碼不一致使用?iconv?或設置?LANG=C
忽略字段錯誤參數?-f?設置不當檢查字段索引是否正確
統計結果異常輸入數據格式混亂使用?tr?或?awk?預處理

十、總結對比表:uniq 常用參數一覽

參數功能
-c顯示每行出現次數
-d只顯示重復行
-u只顯示唯一行
-i忽略大小寫
-f忽略前 N 個字段
-s忽略前 N 個字符
-w對每行前 N 字符進行比較

十一、結語

感謝您的閱讀!如果你有任何疑問或想要分享的經驗,請在評論區留言交流!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89703.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

氛圍編碼(Vice Coding)的工具選擇方式

一、前言 在寫作過程中&#xff0c;我受益于若干優秀的博客分享&#xff0c;它們給予我寶貴的啟發&#xff1a; 《5分鐘選對AI編輯器&#xff0c;每天節省2小時開發時間讓你早下班&#xff01;》&#xff1a;https://mp.weixin.qq.com/s/f0Zm3uPTcNz30oxKwf1OQQ 二、AI編輯的…

[硬件電路-57]:根據電子元器件的受控程度,可以把電子元器件分為:不受控、半受控、完全受控三種大類

根據電子元器件的受控程度&#xff0c;可將其分為不受控、半受控、完全受控三大類。這種分類基于元器件的工作狀態是否需要外部信號&#xff08;如電壓、電流、光、熱等&#xff09;的主動調控&#xff0c;以及調控的精確性和靈活性。以下是具體分類及實例說明&#xff1a;一、…

基于Pytorch的人臉識別程序

人臉識別原理詳解人臉識別是模式識別和計算機視覺領域的重要研究方向&#xff0c;其目標是從圖像或視頻中識別出特定個體的身份。現代人臉識別技術主要基于深度學習方法&#xff0c;特別是卷積神經網絡 (CNN)&#xff0c;下面從多個維度詳細解析其原理&#xff1a;1. 人臉識別的…

ubuntu 開啟ssh踩坑之旅

文章目錄確認當前用戶為普通用戶 or root命令使用ssh還是sshd服務名稱的由來apt update和apt upgrade的關系apt upgrade報錯&#xff1a;“E: 您在 /var/cache/apt/archives/ 上沒有足夠的可用空間”開啟ssh步驟錯誤排查查看日志修改sshd_config文件允許防火墻通過22端口確認當…

力扣:動態規劃java

sub07 線性DP - O(1) 狀態轉移2_嗶哩嗶哩_bilibili 跳樓梯 class Solution {public int climbStairs(int n) {if (n < 1) {return 1; // 處理邊界情況}int[] dp new int[n 1]; // 創建長度為n1的數組&#xff0c;比方說跳二級樓梯dp[0] 1; // 初始值設定dp[1] 1;for (…

React Native打開相冊選擇圖片或拍照 -- react-native-image-picker

官方文檔&#xff1a;https://www.npmjs.com/package/react-native-image-picker 場景&#xff1a;點擊按鈕打開相冊選擇圖片或者點擊按鈕拍照 import { launchCamera, launchImageLibrary } from react-native-image-picker;// ... <TouchableOpacityactiveOpacity{0.7}o…

USRP B210生成信號最大帶寬測試之Frank

書接上文&#xff1a; USRP B210生成LFM,SFM,BPSK,Frank信號的最大帶寬測試&#xff08;一&#xff09; USRP B210生成信號最大帶寬測試&#xff08;二&#xff09;SFM USRP B210生成信號最大帶寬測試&#xff08;三&#xff09;LFM USRP B210生成信號最大帶寬測試之BPSK …

pages.json頁面路由中,globalStyle的各個屬性

歡迎來到我的UniApp技術專欄&#xff01;&#x1f389; 在這里&#xff0c;我將與大家分享關于UniApp開發的實用技巧、最佳實踐和項目經驗。 專欄特色&#xff1a; &#x1f4f1; 跨平臺開發一站式解決方案 &#x1f680; 從入門到精通的完整學習路徑 &#x1f4a1; 實戰項目經…

[前端技術基礎]CSS選擇器沖突解決方法-由DeepSeek產生

在 CSS 中&#xff0c;當多個選擇器對同一元素的相同屬性&#xff08;如顏色&#xff09;定義發生沖突時&#xff0c;瀏覽器會通過層疊規則&#xff08;Cascading&#xff09;解決沖突。具體優先級從高到低如下&#xff1a;1. !important 規則&#xff08;最高優先級&#xff0…

解決 IDEA 中 XML 文件的 “URI is not registered” 報錯

解決 IDEA 中 XML 文件的 “URI is not registered” 報錯 在使用 IDEA 開發時&#xff0c;XML 文件&#xff08;尤其是帶有 DTD 約束的配置文件&#xff0c;如 MyBatis、Spring 配置文件&#xff09;常出現 URI is not registered (Settings | Languages & Frameworks | S…

FreeBSD Conda Python3.12下安裝GPT4Free(g4f)0.5.7.3版本

FreeBSD下不能直接安裝g4f&#xff0c;因為Curl_cffi這個庫裝不上。0.5.0.3這個版本不需要這個庫&#xff0c;所以可以安裝。 那么就沒有辦法安裝新版本了嗎&#xff1f; 有的&#xff0c;就是在linux仿真環境下。 Linux仿真環境安裝g4f 最簡單的方法是使用chroot進入linux仿…

Node.js 中基于請求 ID 實現簡單隊列(即時阻止策略/排隊等待策略)

在Node.js 中基于請求 ID 實現簡單隊列 下面示例演示兩種策略&#xff0c;以同一個請求 ID 為單位&#xff1a; 即時阻止策略&#xff1a;如果已有相同 ID 的請求在處理&#xff0c;直接報錯并返回。 排隊等待策略&#xff1a;后續相同 ID 的請求不報錯&#xff0c;而是掛起&…

詳解如何解決Mysql主從復制延遲

解決 MySQL 主從復制延遲需要從架構設計、參數調優、硬件優化等多維度綜合處理。一、根本原因分析主從延遲的本質是&#xff1a;從庫的 SQL 線程重放速度 < 主庫的寫入速度 常見瓶頸點&#xff1a;單線程回放&#xff08;MySQL 5.6 前&#xff09;從庫硬件配置低&…

Spring之事務使用指南

Spring之事務使用指南一、事務的基礎概念1.1 什么是事務&#xff1f;1.2 事務的ACID特性1.3 Spring事務的核心優勢二、Spring事務的核心配置三、事務傳播行為&#xff08;Propagation&#xff09;3.1 常用傳播行為詳解3.1.1 REQUIRED&#xff08;默認值&#xff09;3.1.2 SUPPO…

基于FPGA的多級流水線加法器verilog實現,包含testbench測試文件

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統原理簡介 5.參考文獻 6.完整工程文件 1.課題概述 流水線&#xff08;Pipeline&#xff09;技術源于工業生產中的裝配線理念&#xff0c;在數字電路中&#xff0c;它將一個復雜運算任務分解為若干個子任務&#xff0c;每…

5.1.4習題精講

一、單項選擇題 01. 下列部件不屬于控制器的是&#xff08; C &#xff09;。 題目原文 下列部件不屬于控制器的是&#xff08; &#xff09;。 A. 指令寄存器 B. 程序計數器 C. 程序狀態字寄存器 D. 時序電路 正確答案&#xff1a;C 題目解析 考點分析&#xff1a; 本題考察CP…

華為云Flexus+DeepSeek征文|低代碼 × 強推理:華為云 Flexus 搭建可部署的 AI Agent 實踐方案【搭建寵物養護小知識AI助手】

文章目錄華為云FlexusDeepSeek征文&#xff5c;低代碼 強推理&#xff1a;華為云 Flexus 搭建可部署的 AI Agent 實踐方案【搭建寵物養護小知識AI助手】&#x1f680; 引言一、核心技術概覽1. 華為云 Flexus X2. DeepSeek-R1 模型3. Dify 平臺二、總體架構設計三、環境準備與資…

基于智慧經營系統的學校住宿登記報表分析與應用探究-畢業論文—仙盟創夢IDE

摘要本文聚焦學校住宿場景&#xff0c;以 “未來之窗智慧經營&#xff08;學校住宿&#xff09;” 系統生成的日報表、昨日報表、本月報表為研究對象&#xff0c;深入剖析報表數據結構、功能價值及在住宿管理中的應用。通過解讀水費、電費、押金、房費、總計、訂單等數據維度&a…

arping(ARP協議網絡測試工具)

1. 項目介紹&#xff1a;arping 是一個用于在局域網&#xff08;LAN&#xff09;中查找特定 IP 地址是否被占用的實用工具。與傳統的 ping 命令不同&#xff0c;arping 使用 ARP 協議來發送和接收數據包&#xff0c;從而能夠檢測到那些阻止 ICMP 請求的主機。arping 可以幫助網…

【UE5醫學影像可視化】讀取dicom數據生成2D紋理并顯示

文章目錄1.實現目標2.實現過程2.1 數據準備2.2 創建項目2.3 dcmtk庫集成2.4 流程&原理2.5 材質2.6 應用實現3.參考資料1.實現目標 本文在UE5中讀取本地的dicom文件&#xff0c;解析像素值、窗寬窗位等信息&#xff0c;生成2D紋理&#xff0c;在UE場景中實現簡單的2D醫學影像…