欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linux排序去重命令 linux按列去重

linux命令對(duì)某一列去重/統(tǒng)計(jì)

cat file.csv | awk -F '\t' '{print $2}'

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),碭山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:碭山等地區(qū)。碭山做網(wǎng)站價(jià)格咨詢:18982081108

'\t'指的是file.csv不同列以'\t'分割,如果的是以其他符號(hào)分割,換成其她符號(hào);

'{print $2}'是指取第2列,此處從1開(kāi)始計(jì)數(shù),第1列,第2列;

一般去重之前要進(jìn)行排序

cat file.csv | awk -F '\t' '{print $2}'?| sort | uniq

前半部分與命令1一樣,后面加上| sort | uniq

比如通過(guò)命令2發(fā)現(xiàn),第2列取值有兩種,分別是'neg'和‘pos’,那么我想知道有多少行的第2列取值為'pos',多少行的第2列取值為'neg'。

cat file.csv | awk -F '\t' '{print $2}'?|?grep -o 'neg'| wc -l

前半部分與命令1一樣,后面加上?|?grep -o 'neg'| wc -l

grep -o 'neg'就是取出取值為'neg'的行

wc -l 是計(jì)數(shù)有多少行

每天一個(gè)linux命令(1)sort

sort 是將文件的每一行作為一個(gè)單位,相互比較,比較原則是從首字符向后,依次按照ASCII碼值進(jìn)行比較,默認(rèn)將他們按照升序輸出

降序

在輸出中去重

將排序結(jié)果輸出到原文件

sort的默認(rèn)輸出是輸出到標(biāo)準(zhǔn)輸出,如果想把結(jié)果輸出到文件,需要 sort file newfile,但是如果想把結(jié)果輸出到原文件這樣就不行了,這時(shí)就需要 使用sort -o

以數(shù)值來(lái)排序

sort 默認(rèn)是按照字符串排序的,這樣就會(huì)出現(xiàn)10比3小的情況,sort -n 就可以告訴sort 以整數(shù)排序

-t 后面跟 分隔符

-k 后面跟數(shù)字,表示用第幾列排序

如 sort -t : -k 2 表示把每行 以:號(hào)分割,按照第二列排序

banana:30:5.5

orange:20:3.4

apple:10:2.5

我們可以看到,當(dāng)baidu 和soho都是100的時(shí)候,baidu排在前面,當(dāng)當(dāng)前域按照默認(rèn)規(guī)矩,是從第一個(gè)域開(kāi)始進(jìn)行升序排序,因此baidu排在了sohu前面。

sort 支持 -k 2 -k3這種模式,如果你需要,你可以繼續(xù)這么寫(xiě)下去

你仔細(xì)看看,在-k 3后面偷偷加上了一個(gè)小寫(xiě)字母r,r和-r的作用是一樣,你也可以把前面的-n去掉 在r后面加上n,如下

其實(shí)-k 選項(xiàng) 功能很強(qiáng)大,語(yǔ)法[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

從逗號(hào)前后 分為兩大部分,即-k 2,2,是嚴(yán)格使用第一個(gè)域排序,如果只設(shè)置-k 2 其實(shí)是按照從第一個(gè)域到行尾。逗號(hào)分開(kāi)的每部分又有一個(gè)點(diǎn)表示子域,即-k 1.2表示 按照第一個(gè)域的第二個(gè)字符排序,Modifiers就是我們用到的n和r 如 -k 1.2nr 具體我們看下面的例子。

我們使用了-k 1.2,這就表示對(duì)第一個(gè)域的第二個(gè)字符開(kāi)始到本域的最后一個(gè)字符為止的字符串進(jìn)行排序。你會(huì)發(fā)現(xiàn)baidu因?yàn)榈诙€(gè)字母是a而名列榜首。sohu和 google第二個(gè)字符都是o,但sohu的h在google的o前面,所以兩者分別排在第二和第三。這和之前說(shuō)到的按照默認(rèn)的排序規(guī)則 是不同的,當(dāng)?shù)谝粋€(gè)域的第二個(gè)字符相同時(shí),他不會(huì)去按照第一個(gè)字符排序,而是按照后面的字符排序,這是因?yàn)?k 1.2是對(duì)第一個(gè)域的第二個(gè)字符開(kāi)始到本域的最后一個(gè)字符為止的字符串進(jìn)行排序。而之前的夸域其實(shí)是一種假象。

-u只識(shí)別用-k設(shè)定的域,發(fā)現(xiàn)相同,就將后續(xù)相同的行都刪除

但是這時(shí)候,卻一行也沒(méi)有刪除。原來(lái)-u是會(huì)權(quán)衡所有-k選項(xiàng),將都相同的才會(huì)刪除,只要其中有一級(jí)不同都不會(huì)輕易刪除的

可以用到b、d、f、i、n 或 r。

其中n和r你肯定已經(jīng)很熟悉了。

b表示忽略本域的簽到空白符號(hào)。

d表示對(duì)本域按照字典順序排序(即,只考慮空白和字母)。

f表示對(duì)本域忽略大小寫(xiě)進(jìn)行排序。

i表示忽略“不可打印字符”,只針對(duì)可打印字符進(jìn)行排序。(有些ASCII就是不可打印字符,比如\a是報(bào)警,\b是退格,\n是換行,\r是回車等等)

【shell】Linux刪除文本重復(fù)行

通常如果我們想獲取一個(gè)文件里不重復(fù)的行的時(shí)候,我們可以直接通過(guò)?sort?-u?命令,先把文件排序,然后去掉連續(xù)的重復(fù)行就行。

可是,如果我們?nèi)サ糁貜?fù)行之后,還想保留文件原有的順序,該怎么辦呢?

雖然 Linux 下有個(gè)看上去似乎很有用的命令叫uniq,但事實(shí)上?uniq?命令僅僅只對(duì)連續(xù)的重復(fù)行有效。

如果不排序,直接使用 uniq 命令是沒(méi)有用的;使用?sort?-u?的話,我們就丟失了文件原有的行的順序了。

一個(gè)終極的解決方案是使用 awk:

簡(jiǎn)要解釋一下:awk 的基本執(zhí)行流程是,對(duì)文件的每一行,做一個(gè)指定的邏輯判斷,如果邏輯判斷成立,則執(zhí)行指定的命令;如果邏輯判斷不成立,則直接跳過(guò)這一行。

我們這里寫(xiě)的 awk 命令是!x[$0]++,意思是,首先創(chuàng)建一個(gè) map 叫x,然后用當(dāng)前行的全文$0作為 map 的 key,到 map 中查找相應(yīng)的 value,如果沒(méi)找到,則整個(gè)表達(dá)式的值為真,可以執(zhí)行之后的語(yǔ)句;如果找到了,則表達(dá)式的值為假,跳過(guò)這一行。

由于表達(dá)式之后有++,因此如果某個(gè) key 找不到對(duì)應(yīng)的 value,該++操作會(huì)先把對(duì)應(yīng)的 value 設(shè)成 0,然后再自增成 1,這樣下次再遇到重復(fù)的行的時(shí)候,對(duì)應(yīng)的 key 就能找到一個(gè)非 0 的 value 了。

我們前面說(shuō)過(guò),awk 的流程是先判斷表達(dá)式,表達(dá)式為真的時(shí)候就執(zhí)行語(yǔ)句,可是我們前面寫(xiě)的這個(gè) awk 命令里只有表達(dá)式,沒(méi)有語(yǔ)句,那我們執(zhí)行什么呢?原來(lái),當(dāng)語(yǔ)句被省略的時(shí)候,awk 就執(zhí)行默認(rèn)的語(yǔ)句,即打印整個(gè)完整的當(dāng)前行。就這樣,我們通過(guò)這個(gè)非常簡(jiǎn)短的 awk 命令實(shí)現(xiàn)了去除重復(fù)行并保留原有文件順序的功能。

linux去重命令

linux去重命令是什么呢?

在介紹uniq命令之前,我們先來(lái)新建在下面的案例中需要用到的文件/tmp/uniq.txt,內(nèi)容如下

默認(rèn)情況下uniq只會(huì)檢索相鄰的重復(fù)數(shù)據(jù)從而去重。在/tmp/uniq.txt中雖然“onmpw web site” 有三條,但是其中一條是和其他兩條不相鄰的,所以只去重了一條,同理“error php function”也是這種情況。

鑒于以上的檢索機(jī)制,所以u(píng)niq一般情況下要和sort命令一塊兒使用。

復(fù)制代碼

# sort 1.txt | uniq

alpha css web

cat linux command

error php function

hello world

onmpw web site

recruise page site

repeat no data

wello web site

復(fù)制代碼

現(xiàn)在再看是不是所有的重復(fù)項(xiàng)都已經(jīng)經(jīng)過(guò)去重處理了。

好了,小試牛刀一把以后,下面我們開(kāi)始對(duì)uniq命令的選項(xiàng)進(jìn)行簡(jiǎn)單的介紹。

-c 統(tǒng)計(jì)每一行數(shù)據(jù)的重復(fù)次數(shù)

復(fù)制代碼

sort 1.txt | uniq -c

1 alpha css web

1 cat linux command

2 error php function

1 hello world

3 onmpw web site

1 recruise page site

1 repeat no data

1 wello web site

復(fù)制代碼

我們看 “error php function”出現(xiàn)了兩次,“onmpw web site”出現(xiàn)了三次。其余的都沒(méi)有重復(fù)項(xiàng)所以為1。

-i 忽略大小寫(xiě)

在1.txt中添加一行數(shù)據(jù) “Error PHP function”

復(fù)制代碼

cat 1.txt

alpha css web

cat linux command

error php function

hello world

onmpw web site

onmpw web site

wello web site

Error PHP function

recruise page site

error php function

repeat no data

onmpw web site

復(fù)制代碼

復(fù)制代碼

sort 1.txt | uniq –c

1 alpha css web

1 cat linux command

2 error php function

1 Error PHP function

1 hello world

3 onmpw web site

1 recruise page site

1 repeat no data

1 wello web site

復(fù)制代碼

我們看結(jié)果,uniq默認(rèn)是區(qū)分大小寫(xiě)的。使用-i可以忽略掉大小寫(xiě)問(wèn)題

復(fù)制代碼

sort 1.txt | uniq –c –i

1 alpha css web

1 cat linux command

3 error php function

1 hello world

3 onmpw web site

1 recruise page site

1 repeat no data

1 wello web site

復(fù)制代碼

現(xiàn)在再看是不是大小寫(xiě)已經(jīng)忽略掉了。

-u 只輸出沒(méi)有重復(fù)的數(shù)據(jù)

復(fù)制代碼

sort 1.txt | uniq –iu

alpha css web

cat linux command

hello world

recruise page site

repeat no data

wello web site

復(fù)制代碼

看到?jīng)],結(jié)果中的“error php function”和“onmpw web site”都沒(méi)有被輸出。

-w N 表示從第一個(gè)字符開(kāi)始只檢索N個(gè)字符來(lái)判重。

復(fù)制代碼

sort 1.txt | uniq –iw 2

alpha css web

cat linux command

error php function

hello world

onmpw web site

recruise page site

wello web site

復(fù)制代碼

這里我們讓uniq只對(duì)前兩個(gè)字符進(jìn)行檢索,recruit 和 repeat前兩個(gè)字符都是re,所以這兩行也被認(rèn)為是重復(fù)的。

-f N 表示略過(guò)前面N個(gè)字段,從第N+1個(gè)字段開(kāi)始檢索重復(fù)數(shù)據(jù)。以空格符或者tab鍵為分隔符。

復(fù)制代碼

sort 1.txt | uniq –icf 2

1 alpha css web

1 cat linux command

3 error php function

1 hello world

4 onmpw web site

1 repeat no data

1 wello web site

復(fù)制代碼

我們?cè)诮Y(jié)果中可以看到,這是略過(guò)前面的2個(gè)字段,從第三個(gè)字段開(kāi)始判重的?!皉ecruise page site” 和 “onmpw web site”的第三個(gè)字段相同,所以被認(rèn)為是相同的數(shù)據(jù)。但是我們看到,“wello web site”和“onmpw web site”不但第三個(gè)字段相同,第二個(gè)也相同。那為什么它不被計(jì)入“onmpw web site”的重復(fù)數(shù)據(jù)中呢。對(duì)于這個(gè)問(wèn)題就要回到前面說(shuō)的,uniq只檢測(cè)相鄰的數(shù)據(jù)是否是重復(fù)的。

要解決這個(gè)問(wèn)題還需要在sort命令上著手。還記得sort命令的-k選項(xiàng)嗎,沒(méi)錯(cuò),我們就用它來(lái)解決。

復(fù)制代碼

sort –k 2 1.txt | uniq –icf 2

1 alpha css web

1 cat linux command

1 repeat no data

1 recruise page site

3 error php function

4 onmpw web site

1 hello world

復(fù)制代碼

我們看,是不是解決了。

-s N表示略過(guò)前面N個(gè)字符,關(guān)于這個(gè)選項(xiàng)的例子我們這里就不再舉了,該選項(xiàng)和-f N的用法差不多。只不過(guò)-f N是略過(guò)前面N個(gè)字段;-s是略過(guò)前面N個(gè)字符。

-d 只輸出有重復(fù)項(xiàng)的第一條的數(shù)據(jù)。

sort 1.txt | uniq -idw 2

repeat no data

error php function

onmpw web site

結(jié)果只有這三條。為什么會(huì)有“repeat no data”這條數(shù)據(jù),這里注意-w 2的應(yīng)用。

-D 對(duì)于重復(fù)項(xiàng)全部輸出

復(fù)制代碼

sort 1.txt | uniq –iDw 2

repeat no data

recruise page site

error php function

error php function

Error PHP function

onmpw web site

onmpw web site

onmpw web site

復(fù)制代碼

好了,關(guān)于uniq的選項(xiàng)的所有常用的命令已經(jīng)都介紹完了。關(guān)于uniq更詳細(xì)的信息可以使用命令info uniq。

當(dāng)前名稱:linux排序去重命令 linux按列去重
URL地址:http://chinadenli.net/article42/dogsshc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、品牌網(wǎng)站建設(shè)ChatGPT、搜索引擎優(yōu)化網(wǎng)站制作、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)