鶴立雞群!用Linux uniq一眼找出不一樣的那行

2020-12-25 程式設計師小助手

引言

如果你是Linux用戶,並且工作涉及處理和操作文本文件和字符串,那麼你應該已經熟悉了uniq命令,因為它是最常用的命令。

對於那些不熟悉uniq命令的人來說,它就是一個命令行工具,用於列印或忽略重複的字符串和行。

uniq過濾來自輸入(或stdin)的相鄰匹配行,並寫入到輸出(或stdout)。

如果沒有選項,匹配線將合併到第一個引用。

下面通過示例演示uniq的不同作用。

忽略重複項

下面是我們本文要處理和篩選的內容。

cat coder-helper.txt HelloHello How are you? How are you? Thank you Thank you

執行以下指令

uniq coder-helper.txt

輸出內容如下

Hello How are you? Thank you

顯示重複行數

使用-c參數,可以查看文件中的重複行計數。執行以下指令:

uniq -c coder-helper.txt

輸出內容如下:

2 Hello 2 How are you? 2 Thank you

僅列印有重複的行

為了演示此功能,我們將coder-helper.txt文本內添加一行內容,如下:

cat coder-helper.txt HelloHelloGood morning How are you? How are you? Thank you Thank you

通過使用-d參數,我們可以只選擇文件中重複的行。

uniq -d coder-helper.txt

輸出內容如下:

Hello How are you? Thank you

比較的時候忽略大小寫的區別

通常,當你使用uniq命令時,它會考慮字母的大小寫。但是如果想大小寫不敏感,可以使用-i參數。

假如我們的文本內容如下:

cat coder-helper.txt Hello hello How are you? How are you? Thank you thank you

執行以下命令:

uniq coder-helper.txt

輸出內容如下:

Hello hello How are you? Thank you thank you

再加上-i參數:

uniq -i coder-helper.txt

輸出內容如下:

Hello How are you? Thank you

大家看到了,輸出的是有重複行的第一行內容。且忽略了大小寫。

僅列印沒有重複行的內容

如果你只想查看文件中的唯一行,可以使用-u參數。假如原始內容如下:

cat coder-helper.txt Hello Hello Good morning How are you? How are you? Thank you Thank you Bye

執行以下指令:

uniq -u coder-helper.txt Good morning Bye

排序並查找重複項

有時,重複條目可能包含在文件的不同位置。

在這種情況下,如果我們簡單地使用uniq命令,它將不會檢測到不同行中的這些重複條目

因此,我們首先需要對文件進行排序,然後才能找到重複項。

假如文本內容如下:

cat coder-helper.txt Adam Sara Frank John Ann Matt Harry Ann Frank John

我們使用管道,先排序文件,然後統計重複行計數。執行以下指令:

sort coder-helper.txt | uniq -c

輸出內容如下:

1 Adam 2 Ann 2 Frank 1 Harry 2 John 1 Matt 1 Sara

保存篩選內容到其他文件

當然可以使用管道重定向,但是uniq也提供了把篩選內容保存的文件的功能。假如內容如下:

cat coder-helper.txt Hello Hello How are you? Good morning Good morning Thank you

篩選出沒有重複的項:

uniq -u coder-helper.txt

輸出內容如下:

How are you? Thank you

uniq最後一個位置,定義的是輸出文件名。

uniq -u coder-helper.txt result.txt

查看並輸出result.txt內容。

cat result.txt How are you? Thank you

忽略開頭的字符

要忽略開頭的幾個字符,可以使用-s參數,但需要指定需要忽略的字符數。假如內容如下:

cat coder-helper.txt Aapple Bapple Cpears Dbanana Ebanana

我們忽略首字母進行排重:

uniq -s 1 coder-helper.txt

輸出內容如下:

Aapple Cpears Dbanana

寫在最後

配合管道符靈活運用,把uniq的功能發揮到極致吧。

Happy coding :-)

相關焦點

  • 老掉牙的Linux uniq還能這麼玩兒!悲憤網友:以前都白學了!
    引言如果你是一個Linux用戶,並且工作涉及到處理和操作文本文件和字符串,那麼你應該已經熟悉uniq命令了,因為它是該領域最常用的命令。對於不熟悉uniq命令的人來說,它就是一個命令行工具,用於列印或省略重複的行。這基本上是從輸入中過濾相鄰的匹配行,然後寫入輸出。
  • 搞定 Linux 這一篇就他媽夠了!
    可以看到,linux只佔了那可憐的一小塊。這就像人類的出現,在生命的長河中,微不足道,但卻是一個質的飛躍。你可能注意到,在前面的描述中,說的是GUN/Linux,而不僅僅是Linux。Linux本身只是一個內核,作用有限,只有和GNU聯合起來,擁有完整的生態才會發揮它的作用。
  • 我正在運行的 Linux 是什麼版本? | Linux 中國
    編譯自 | https://opensource.com/article/18/6/linux-version  作者 | Joshua Allen Holm 譯者 | MjSeven 🌟 🌟 🌟 🌟 共計翻譯:49 篇 貢獻時間:139 天掌握這些快捷命令以找出你正在運行的 Linux 系統的內核版本和發行版。「什麼版本的 Linux ?」
  • Linux 命令行下的好東西
    Linux 命令行命令現在做網站做移動應用最講究的就是推廣了,推廣做的好那就成功了一大半,相對的沒曝光產品再好也很難做下去。就這個角度而言絕大多數 Linux 命令行的推廣簡直是爛透了。繁多 Linux 有用極了的命令行工具就靜靜的躺在你發行版默認安裝的包裹裡,很多時候只有當你碰到什麼問題的時候網上搜一圈才能知道。更蛋疼的是這裡面很多東西你一旦知道了就會想我靠原來沒這個到底是怎麼過的下去。所以這裡我會列出一些我用過的一些,大部分發行版默認就有,或者能用包裹管理工具輕鬆獲取的東西。
  • UNIQ團魂時刻,期待大U合體
    8.汶翰吉他上,是其他成員的籤名,他說過那個吉他是他最喜歡的。9.以團裡面,有一期家長採訪,軒哥爸爸的採訪裡,後面背景牆是UNIQ合照。12.承衍那張錢包裡的照片,是他們的合照。13.汶翰之前說過「不可以只喜歡我,喜歡就要都喜歡哦。」14.青你裡,胡春楊說汶翰哥的願望就是讓UNIQ開演唱會,原來他的心願是如此之強烈。
  • 小八卦,尹正王一博,範冰冰,周冬雨,uniq,蔣欣
    在國外,範冰冰還是很有人脈的,而且她在國外的市場完全沒有因為國內的這些事而影響到,這兩年她在國外花可是開了一茬又一茬了,光說大刊,她都拿下不止一次了。周冬雨算是一個電影式演員,如果說她在電影中可以發揮出10分的能力,那她在劇中可能只能發揮出6分,所以她演電視劇才會經常被嘲,她也因此不願意接劇圈的資源。
  • MX Linux:一款專注於簡潔性的中等體量發行版 | Linux 中國
    那究竟是什麼原因使得 antiX 決定構建另一個輕量化發行版呢,僅僅是因為這次換成了 Xfce 嗎?好吧,Linux 社區中的任何人都知道,增加了不同風格的好的輕量級發行版是值得一試的(特別是可以使得我們的舊硬體擺脫進入垃圾填埋場的宿命)。當然,LXDE 和 Xfce 並不完全屬於同一類別。LXDE 應該被認為是一個真正的輕量級桌面,而 Xfce 應該被認為是一個中等體量的桌面。
  • Linux Shell命令快捷獲得系統幫助
    #.省略上面是2個例子,通過參數獲得命令使用幫助,這是我們經常用的。 說點題外話,開始跑題了……,呵呵我想說下命令常見參數規律,一般如果帶參數是一個字符,那麼就用:一個」-「連接,如果後面參數是多個字符就用:」–「連接。是不是一個」-「後面不能接多個字符呢?這點就是linux命令解析靈活性了,如果你把多個字符用一個」-「連接,它會將它分割為多個參數。
  • 同為新生,張子楓趙今麥同學合影差距大,一個不起眼一個鶴立雞群
    而在此刻張子楓同學曬出了她們的一組合影,但是沒想到張子楓明明位居c位卻十分不明顯,在眾多美女同學之間毫無明星氣質。北電大一新生合影,張子楓明明位居C位卻不起眼趙今麥大一生活多姿多彩,氣質出眾鶴立雞群除去張子楓之外還有一位小童星同樣備受大家期待,那便是趙今麥。
  • uniq組合:五位成員發展大不相同,王一博最火,李汶翰也再次出道
    uniq作為中韓男子組合,有顏值還能歌善舞出道之時被大眾很看好,然而從出道到現在幾年時間已經過去了,組合成員的發展各不相同,讓人唏噓,相信uniq不活動的原因我們也知道了,為了在娛樂圈發展下去,現在他們也是積極在尋找各種出路,對於未來uniq是否能夠合體,只能等時間給我們答案了。
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    因為在這個目錄中包含了所有linux系統中使用的外部設備。但是這裡並不是放的外部設備的驅動程序。這一點和常用的windows,dos作業系統不一樣。它實際上是一個訪問這些外部設備的埠。可以非常方便地去訪問這些外部設備,和訪問一個文件,一個目錄沒有任何區別。/etc:etc這個目錄是linux系統中最重要的目錄之一。在這個目錄下存放了系統管理時要用到的各種配置文件和子目錄。
  • 如何監測Linux上失敗的登錄嘗試
    您可以使用這樣的命令按帳戶匯總失敗登錄的情況:$ sudo grep "Failed password" /var/log/auth.log | grep -v COMMAND | awk '{print $9}' | sort | uniq
  • 「正點原子Linux連載」第三十七章Linux內核移植
    _2.1.0_ga linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek完成以後創建VSCode工程,步驟和Windows下一樣,重點是.vscode/settings.json這個文件。
  • 在Linux作業系統裡使用xargs命令
    如果有過,那你肯定會深有感觸這是多麼的無聊和效率低下。還好有種簡單的方式,可以在基於Unix的作業系統中使用xargs命令解決這個煩惱。通過這個命令你可以有效地處理多個文件,節省你的時間和精力。在這篇教程中,你可以學到如何一次性對多個文件執行命令或腳本操作,再也不用擔心像單獨處理無數個日誌或數據文件那樣嚇人的任務了。
  • Linux 基金會發布 2017 最佳 Linux 發行名單
    原文來自:  http://www.linuxeden.com/html/news/20170110/167701.html本文地址:  http://www.linuxprobe.com/linux-word.html
  • Linux兩個文本計算交集、差集、併集
    1052,計算:交集、差集、併集交集計算交集可以簡單地理解為,獲取兩個文件內容的相同部分,並輸出命令:sort a.txt b.txt | uniq101103差集計算差集可以簡單地理解為,獲取兩個文件內容的不同部分,並輸出命令:sort a.txt b.txt b.txt | uniq
  • 玩轉嵌入式之如何在Linux系統中搭建tftp伺服器·圖文視頻
    但是,當我們做嵌入式linux開發的時候,如果用Windows搭建tftp伺服器,用的還是虛擬機,就得在虛擬機中開啟共享文件夾,然後再把文件放入共享文件夾內,最後傳輸到開發板中執行。這麼複雜的步驟,對於我來講太繁瑣了……那麼我們是否可以只用一個Linux系統就完成編譯+文件傳輸呢?答案是可以的!下面就來教大家如何在Linux系統下安裝tftp伺服器。
  • Windows 10 可直接訪問 Linux 文件
    在這裡,你可以像在Windows下一樣執行各種熟悉的操作,包括在不同文件夾之間拖拽文件、複製與粘貼、使用右鍵菜單,甚至是打開VSCode。另外,WLS是一個命令行工具,所以上述功能也可以在命令行模式下使用,只需嵌入「\\wsl$\{distro_name}\」命令即可,含義同上。
  • 如何在Linux中設置藍牙
    在一些Linux發行版上,藍牙是開箱即用的完美設置。像Ubuntu和Elimative這樣的發行版使您可以輕鬆地在您的機器上設置和工作藍牙。然而,像Fedora和Arch Linux這樣的其他發行版需要您做一些設置,才能在您的機器上充分享受藍牙的好處。以下是如何在Linux中設置藍牙。
  • linux系統中update和upgrade命令區別
    linux系統中update和upgrade命令區別在linux作業系統中update和upgrade都是更新命令:yum upgrade和yum update。兩個命令在linux系統中都是更新所有包,但是兩個命令的側重點不一樣。