自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Unix中統(tǒng)計(jì)、去除文件中的重復(fù)行

運(yùn)維 系統(tǒng)運(yùn)維
在數(shù)據(jù)庫(kù)中,如果表中記錄有重復(fù)的話,則只需要通過distinct關(guān)鍵字就可以達(dá)到去除重復(fù)行的目的。那么在Unix操作系統(tǒng)中,是否也有便利的工具能夠?qū)崿F(xiàn)這個(gè)需求呢?答案當(dāng)然是肯定的。為了實(shí)現(xiàn)這個(gè)需求,我們需要用到sort排序命令和uniq去除重復(fù)行命令。

在數(shù)據(jù)庫(kù)中,如果表中記錄有重復(fù)的話,則只需要通過distinct關(guān)鍵字就可以達(dá)到去除重復(fù)行的目的。那么在Unix操作系統(tǒng)中,是否也有便利的工具能夠?qū)崿F(xiàn)這個(gè)需求呢?答案當(dāng)然是肯定的。為了實(shí)現(xiàn)這個(gè)需求,我們需要用到sort排序命令和uniq去除重復(fù)行命令。

  眾所周知,在Unix系統(tǒng)維護(hù)中,系統(tǒng)工程師經(jīng)常需要把多個(gè)文件合并成一個(gè)文件。此時(shí)就會(huì)遇到一個(gè)問題,即將多個(gè)文件連接或者合并在一起的時(shí)候,可能會(huì)產(chǎn)生重復(fù)的記錄。這是系統(tǒng)工程師不希望看到的。那么該如何消除這些重復(fù)的記錄呢?熟悉排序命令的讀者,一定知道利用sort排序命中一個(gè)-u 可選項(xiàng)可以達(dá)到刪除重復(fù)行的目的。但是這個(gè)功能并不是很強(qiáng)。如不能夠幫助系統(tǒng)工程師找出哪些行是重復(fù)的或者統(tǒng)計(jì)重復(fù)行出現(xiàn)的次數(shù)等等。要實(shí)現(xiàn)這些復(fù)雜的功能,就需要借助于這個(gè)uniq去除重復(fù)行命令了。

  ***步:先對(duì)文件中的記錄進(jìn)行排序。

  如現(xiàn)在系統(tǒng)工程師將兩個(gè)文件合并后,產(chǎn)生如下一個(gè)文件log.txt。

  銷售部出現(xiàn)系統(tǒng)備份故障

  采購(gòu)部出現(xiàn)系統(tǒng)備份故障

  銷售部出現(xiàn)系統(tǒng)備份故障

  財(cái)務(wù)部出現(xiàn)系統(tǒng)備份故障

  這是一個(gè)系統(tǒng)備份程序出現(xiàn)故障時(shí)的提示信息。為了便于管理,系統(tǒng)工程師往往先將一個(gè)星期或者半個(gè)月的錯(cuò)誤記錄合并在同一個(gè)文件中。然后再把重復(fù)的記錄去除掉,就可以發(fā)現(xiàn)哪些部分的備份出了問題。如果不去掉重復(fù)行的話,那么一個(gè)個(gè)核對(duì)過去就會(huì)很麻煩。看著一長(zhǎng)串錯(cuò)誤列表(其實(shí)很多都是重復(fù)的),也不知道該如何下手。另外統(tǒng)計(jì)重復(fù)行出現(xiàn)的次數(shù)(每個(gè)部分系統(tǒng)備份故障程序的次數(shù))也可以幫助系統(tǒng)工程師判斷這個(gè)錯(cuò)誤是不是偶然性的。為此,現(xiàn)在系統(tǒng)工程師主要想實(shí)現(xiàn)三個(gè)功能。***是能夠統(tǒng)計(jì)這個(gè)文件中錯(cuò)誤信息重復(fù)的次數(shù);第二是能夠知道哪些故障信息出現(xiàn)了一次以上;第三就是得到一個(gè)去除了重復(fù)行的文件,以方便工程師分析問題原因并最終解決問題。這三個(gè)功能的話利用uniq命令都可以輕松解決。不過需要注意的是,在使用這個(gè)去除重復(fù)行的命令之前,必須要先對(duì)這個(gè)記錄文件進(jìn)行排序。其實(shí)這個(gè)原理跟數(shù)據(jù)庫(kù)中的distinct去除重復(fù)行的關(guān)鍵字工作原理是類似的。在數(shù)據(jù)庫(kù)中采用這個(gè)關(guān)鍵字去除重復(fù)記錄時(shí),數(shù)據(jù)庫(kù)會(huì)自動(dòng)對(duì)相關(guān)的記錄進(jìn)行排序,然后再去除重復(fù)行。而現(xiàn)在這個(gè)uniq命令自身沒有排序的功能。這也是Unix操作系統(tǒng)的一個(gè)特點(diǎn),即每個(gè)命令只完成單一的功能。而這個(gè)去除重復(fù)行的uniq命令對(duì)于那些沒有經(jīng)過排序的命令是不起任何作用的。如上面這個(gè)日志文件,如果文件中的記錄沒有排序,那么這個(gè)uniq命令就無(wú)法去除這個(gè)重復(fù)的記錄或者統(tǒng)計(jì)重復(fù)記錄出現(xiàn)的次數(shù)。為此系統(tǒng)工程師要做的***步,就是對(duì)這個(gè)文件排序。如可以使用sort log.txt>log1.txt命令,將這個(gè)日志文件中的記錄進(jìn)行排序并將排序后的結(jié)果保存到一個(gè)文件中。

  第二步:利用uniq命令去除重復(fù)的行。

  當(dāng)某個(gè)文件排序完成之后,就可以使用這個(gè)uniq命令來(lái)去除重復(fù)的行了。如使用uniq log1.txt(注意這里使用的是排序后的文件),系統(tǒng)工程師就可以得到如下的結(jié)果:

  采購(gòu)部出現(xiàn)系統(tǒng)備份故障

  財(cái)務(wù)部出現(xiàn)系統(tǒng)備份故障

  銷售部出現(xiàn)系統(tǒng)備份故障

  從這個(gè)結(jié)果中可以看出,系統(tǒng)由四條記錄變?yōu)榱巳龡l,取出了一條重復(fù)行的記錄。也就是說(shuō),這個(gè)uniq命令會(huì)讀取文件中每一行的內(nèi)容寫入到標(biāo)準(zhǔn)輸出。如果在讀取行的時(shí)候,遇到多行重復(fù)內(nèi)容的話,則只輸出其中的一行。通過這個(gè)工作記錄,就可以實(shí)現(xiàn)去除重復(fù)行的目的。需要注意的是,有時(shí)候系統(tǒng)工程師想要將這個(gè)處理的結(jié)果保存到一個(gè)文件中。這個(gè)跟其他命令的處理方式不一樣。如像ps等命令,想將命令的執(zhí)行結(jié)果保存到一個(gè)文件中,則需要采用重定向符號(hào)>。但是這個(gè)uniq命令則不同。因?yàn)檫@個(gè)命令本省就可以帶兩個(gè)文件名作為參數(shù)。如uniq 原文件 目標(biāo)文件。注意這個(gè)格式并不是說(shuō)讓操作系統(tǒng)分別對(duì)原文件與目標(biāo)文件都進(jìn)行去除重復(fù)行的動(dòng)作。而是對(duì)原文件進(jìn)行去除重復(fù)行的操作,然后將執(zhí)行的結(jié)果保存到目標(biāo)文件中。也就是說(shuō),此時(shí)uniq命令只是對(duì)原文件進(jìn)行處理,并不會(huì)對(duì)目標(biāo)文件進(jìn)行任何去除重復(fù)行的操作。換一句話說(shuō),uniq命令一次只能夠?qū)σ粋€(gè)文件進(jìn)行去除重復(fù)行的操作。另外就是需要注意的是,將執(zhí)行的結(jié)果保存到一個(gè)文件中不需要用到重定向符號(hào)。

 

#p#

第三步:將以上兩個(gè)步驟合二為一。

  如果按照上面那個(gè)步驟來(lái)進(jìn)行操作,雖然是可行的,思路也比較清晰。但是中間會(huì)多一個(gè)排序生成的過渡文件。等操作完成后,需要手工將這個(gè)文件刪除。顯然這增加了工作量。用過管道符的讀者一定知道,這個(gè)管道符有一個(gè)很特殊的用途。即將某個(gè)命令的執(zhí)行結(jié)果傳遞給下一個(gè)命令,讓其作為下一個(gè)命令的參數(shù)。如可以使用命令sort log.lst | uniq –loguniq.lst。

  這個(gè)命令是什么意思呢?首先是利用sort命令對(duì)log.lst文件中的記錄進(jìn)行排序。然后將排序的結(jié)果傳遞給uniq命令。***操作系統(tǒng)會(huì)將去除重復(fù)行后的記錄保存到loguniq.lst文件中。注意,這里將執(zhí)行的結(jié)果保存到文件中也沒有使用這個(gè)>重定向符號(hào)。而是采用了“-文件名”這個(gè)可選項(xiàng)。這個(gè)對(duì)于那些熟悉重定向符號(hào)的讀者可能看起來(lái)不怎么舒服。但是這是Unix系統(tǒng)中文件中的一個(gè)例外,各位系統(tǒng)工程師只需要記住即可。利用上面這個(gè)命令,來(lái)代替上面兩個(gè)步驟,除了工作量減輕不少以外,最重要的就是不會(huì)產(chǎn)生中間的垃圾文件。即這個(gè)命令執(zhí)行的過程中,不會(huì)產(chǎn)生排序后的文件。

  第四步:選取重復(fù)的行或者統(tǒng)計(jì)重復(fù)行出現(xiàn)的次數(shù)。

  以上三個(gè)步驟只是完成了一項(xiàng)功能,即去除文件中重復(fù)的記錄。如果需要對(duì)文件中重復(fù)的記錄進(jìn)行統(tǒng)計(jì),或者只顯示重復(fù)的行,則各位讀者還需要關(guān)注一下筆者下面給大家講述的內(nèi)容。要實(shí)現(xiàn)這兩個(gè)功能,就需要用到三個(gè)可選項(xiàng),分別為-u、-d與-c。其中-u表示只讓操作系統(tǒng)顯示沒有重復(fù)的行。-d是告訴操作系統(tǒng)只顯示重復(fù)的記錄。而可選項(xiàng)-c是讓系統(tǒng)統(tǒng)計(jì)重復(fù)行出現(xiàn)的次數(shù),并且會(huì)在記錄的前面加一列內(nèi)容,表示重復(fù)行出現(xiàn)的次數(shù)。注意,系統(tǒng)工程師也可以將這些結(jié)果保存到一個(gè)文件中。但是同上面的原理一樣,不需要使用管道符號(hào)來(lái)實(shí)現(xiàn)這個(gè)目的??梢灾苯釉谠募竺婕尤胍粋€(gè)目標(biāo)文件,來(lái)實(shí)現(xiàn)保存結(jié)果的目的。

  第五步:截取特定的列來(lái)去除重復(fù)記錄。

  如上面這個(gè)文件中,不止一個(gè)列。如上面這個(gè)文件,其內(nèi)容如下:

  銷售部出現(xiàn)系統(tǒng)備份故障 故障日期2009年6月3日

  采購(gòu)部出現(xiàn)系統(tǒng)備份故障 故障日期2009年6月5日

  銷售部出現(xiàn)系統(tǒng)備份故障 故障日期2009年6月6日

  此時(shí)文件中的記錄是沒有重復(fù)的。但是系統(tǒng)工程師想獲得的信息是哪幾個(gè)部門在重復(fù)的出現(xiàn)類似的問題。此時(shí)系統(tǒng)工程師需要先截取某一個(gè)列,如***列中的信息。然后再將***列中的內(nèi)容利用uniq命令來(lái)去除重復(fù)的行或者統(tǒng)計(jì)重復(fù)行出現(xiàn)的次數(shù)。要實(shí)現(xiàn)這個(gè)目的的話,也比較簡(jiǎn)單。只是在上面幾個(gè)步驟中,多了一個(gè)前期的準(zhǔn)備工作而已。即通過cut等類似的命令,將文件中的某列內(nèi)容截取出來(lái),保存到一個(gè)文件中。然后再進(jìn)行排序與去除重復(fù)行的操作。如果系統(tǒng)工程師不想產(chǎn)生中間文件,也可以利用管道符將cut、sort、uniq等三個(gè)命令連接起來(lái)。另外如果以后需要多次用到這個(gè)功能,工程師想貪圖方便的話,還可以將這個(gè)命令以別名的形式保存起來(lái)。如此的話,下次直接將這個(gè)命令的組合當(dāng)作系統(tǒng)命令來(lái)使用即可。

【編輯推薦】

  1. Linux下隱藏網(wǎng)絡(luò)連接的另一種方法
  2. Linux中學(xué)會(huì)靈活使用shell下的特殊字符
  3. Linux下查看用戶登陸后的操作記錄
責(zé)任編輯:龐桂玉 來(lái)源: ChinaITLab
相關(guān)推薦

2019-12-12 18:00:54

awkLinux開源

2010-09-01 16:47:18

SQL刪除

2011-07-19 16:14:39

SQLite數(shù)據(jù)庫(kù)

2015-09-17 13:26:56

線程數(shù)進(jìn)程Linux

2010-05-11 19:08:36

Unix系統(tǒng)

2009-04-20 15:54:04

SQL Server重復(fù)行

2010-06-28 12:46:09

SQL Server

2010-05-10 19:03:00

Unix文件

2010-04-30 17:21:50

Unix操作系統(tǒng)

2010-05-05 16:36:24

Unix系統(tǒng)

2010-04-30 11:22:23

Unix系統(tǒng)

2012-05-10 08:55:11

Linuxuniq

2010-07-12 09:52:24

刪除 SQL Serv

2010-04-30 18:25:25

Unix刪除

2010-04-13 14:19:51

Unix文件

2010-04-29 16:15:26

Unix文件

2010-05-04 09:22:10

Unix文件

2010-04-26 14:04:18

Unix Shell

2010-05-04 08:52:13

Unix系統(tǒng)

2019-08-28 15:43:03

sed命令Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)