亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

Shell實現文本去重并操持原有順序

2020-07-27 19:08:09
字體:
來源:轉載
供稿:網友

簡單來說,這個技巧對應的是如下一種場景

假設有文本如下

復制代碼 代碼如下:

cccc
aaaa
bbbb
dddd
bbbb
cccc
aaaa

現在需要對它進行去重處理,這個很簡單,sort -u就可以搞定,但是如果我希望保持文本原有的順序,比如這里有兩個aaaa,我只是希望去掉第二個aaaa,而第一個aaaa在bbbb的前面,去重后仍舊要在它前面,所以我期望的輸出結果是
復制代碼 代碼如下:

cccc
aaaa
bbbb
dddd

當然,這個問題本身并不難,用C++或python寫起來都很容易,但所謂殺機焉用牛刀,能用shell命令解決時,它永遠都是我們的首選。答案在最后給出,下面說說我是如何想到這樣

我們有時候想把自己的目錄加入環境變量PATH時會在~/.bashrc文件中這樣寫,比如待加入的目錄為$HOME/bin

復制代碼 代碼如下:

export PATH=$HOME/bin:$PATH

這樣我們等于是在PATH追加了路徑$HOME/bin并讓它在最前面被搜索到,但當我們執行source ~/.bashrc后,$HOME/bin目錄就會被加入PATH,如果我們下次再添加一個目錄,比如
復制代碼 代碼如下:

export PATH=$HOME/local/bin:$HOME/bin:$PATH

再執行source ~/.bashrc時,$HOME/bin目錄在PATH中其實會有兩份記錄,雖然這不影響使用,但對于一個強迫癥來說,這是無法忍受的,于是問題就變成了,我們需要去掉$PATH里重復的路徑,并且保持原有路徑順序不變,也就是原本誰在前面,去重后仍舊在前面,因為在執行shell命令時是從第一個路徑開始查找的,所以順序很重要

好了,說了這么多我們來揭示最終的結果,以文章開始的數據為例,假設輸入文件是in.txt,命令如下

復制代碼 代碼如下:

cat -n in.txt | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2-

這些都是很簡單的shell命令,下面稍作解釋
復制代碼 代碼如下:

cat -n in.txt : 輸出文本,并在前面加上行號,以/t分隔
sort -k2,2 -k1,1n : 對輸入內容排序,primary key是第二個字段,second key是第一個字段并且按數字大小排序
uniq -f1 : 忽略第一列,對文本進行去重,但輸出時會包含第一列
sort -k1,1n : 對輸入內容排序,key是第一個字段并按數字大小排序
cut -f2- : 輸出第2列及之后的內容,默認分隔符為/t

大家可以從第一條命令開始,并依次組合,看看實際輸出效果,那樣便更容易理解了。對于$PATH中的重復路徑又該如何處理呢,還是以前面的例子來說,只需在前后用tr做一下轉換即可

復制代碼 代碼如下:

export PATH=$HOME/local/bin:$HOME/bin:$PATH
export PATH=`echo $PATH | tr ':' '/n' | cat -n | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2- | tr '/n' ':'`

其實這樣使用PATH會有個問題,比如我們執行了以上命令后,如果想去掉$HOME/bin這個路徑,僅僅修改為如下內容是不夠的
復制代碼 代碼如下:

export PATH=$HOME/local/bin:$PATH
export PATH=`echo $PATH | tr ':' '/n' | cat -n | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2- | tr '/n' ':'`

因為我們已經將$HOME/bin加入了$PATH中,這樣做并沒有起到刪除的作用,也許最好的方式還是自己清楚的知道所有路徑,然后顯示指定,而不是采取追加的方式

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久不能| 亚洲黄在线观看| 日韩欧美在线观看视频| 国产日韩中文字幕| 国产精品男人的天堂| 日韩欧亚中文在线| 国产视频亚洲视频| 欧美在线视频a| 亚洲精品aⅴ中文字幕乱码| 色七七影院综合| 久久久av免费| 91po在线观看91精品国产性色| 欧美大肥婆大肥bbbbb| 久久精品国产96久久久香蕉| 欧美午夜无遮挡| 欧美国产极速在线| 欧美激情精品在线| 在线视频免费一区二区| zzijzzij亚洲日本成熟少妇| 欧洲美女免费图片一区| 日韩视频中文字幕| 国产精品精品视频一区二区三区| 欧美一区三区三区高中清蜜桃| 国产91在线播放| 日韩精品极品视频免费观看| 欧美性色xo影院| 91热精品视频| 91夜夜揉人人捏人人添红杏| 曰本色欧美视频在线| 国产91色在线免费| 青青草原一区二区| 国产精品劲爆视频| 精品福利一区二区| 91精品国产高清久久久久久91| 日韩不卡中文字幕| 欧美色播在线播放| 日韩国产一区三区| 日本免费一区二区三区视频观看| 国产精品视频专区| 亚洲剧情一区二区| 国产日韩欧美在线播放| 欧美视频在线免费看| 日韩在线视频一区| 久久香蕉精品香蕉| 国产视频观看一区| 亚洲另类xxxx| 国产精品久久久久久久av电影| 久久精品久久久久久| 日韩国产在线播放| 精品美女久久久久久免费| 亚洲天堂久久av| 欧美日韩另类字幕中文| 5566成人精品视频免费| 午夜精品99久久免费| 欧美日韩在线视频首页| 91精品久久久久久久久| 裸体女人亚洲精品一区| 亚洲xxx视频| 久久国产天堂福利天堂| 久久成人18免费网站| 亚洲第一福利网| 亚洲视频在线视频| 在线观看91久久久久久| 亚洲精品xxxx| 97精品在线视频| 亚洲欧洲在线免费| 欧美久久精品一级黑人c片| 成人两性免费视频| 欧美丰满少妇xxxxx做受| 日本成人激情视频| 亚洲男子天堂网| 伊人久久精品视频| 亚洲大胆人体视频| 日韩精品在线视频| 亚洲精品国产精品国产自| 亚洲欧美资源在线| 午夜精品久久久久久久久久久久久| 亚洲日本成人女熟在线观看| 成人欧美一区二区三区黑人孕妇| 日韩欧美一区视频| 国产精品6699| 国内精品一区二区三区| 日韩免费看的电影电视剧大全| 精品国产一区二区三区久久| 国产精品免费看久久久香蕉| 国产91九色视频| 亚洲国产一区自拍| 亚洲天堂第二页| 久久久久久91香蕉国产| 精品福利樱桃av导航| 国产精品视频专区| 国产午夜精品一区理论片飘花| 最近2019中文免费高清视频观看www99| 久久精品久久精品亚洲人| 亚洲综合中文字幕在线| 91精品久久久久久久| 精品国产精品自拍| 国产激情视频一区| 国产精品影院在线观看| 亚洲综合视频1区| 久久精品视频亚洲| 美女视频黄免费的亚洲男人天堂| 久久这里只有精品视频首页| 97成人精品视频在线观看| 久久人人爽人人爽人人片亚洲| 色婷婷成人综合| 亚洲福利在线看| 最近2019中文字幕第三页视频| 亚洲精品按摩视频| 久99久在线视频| 精品人伦一区二区三区蜜桃免费| 国内精品久久久久久| 亚洲成人国产精品| 国产精品video| 这里只有精品在线播放| 亚洲精品xxxx| 欧美性猛交丰臀xxxxx网站| 久久久综合av| 国产98色在线| 欧美精品电影免费在线观看| 少妇高潮久久久久久潘金莲| 亚洲欧美日韩精品久久| 人人爽久久涩噜噜噜网站| 日本精品视频在线观看| 日韩久久午夜影院| 爱福利视频一区| 久久国产精品影片| 精品调教chinesegay| 国产999精品| 亚洲欧美成人一区二区在线电影| 国产成人精品国内自产拍免费看| 国产精品av在线播放| 亚洲xxxxx电影| 欧美成人免费网| 日韩精品一区二区三区第95| 精品欧美激情精品一区| 日韩在线观看免费网站| 国产一区二区三区在线看| 日韩在线视频网站| 国产精品久久网| 日韩极品精品视频免费观看| 国产高清在线不卡| 亚洲精品成人久久久| 国产精品一区二区三区毛片淫片| 日韩精品黄色网| 久久免费视频网| 亚洲无限乱码一二三四麻| 亚洲欧美日韩图片| 成人国内精品久久久久一区| 亚洲欧洲视频在线| 亚洲精品aⅴ中文字幕乱码| 国产精品极品尤物在线观看| 国产精品视频不卡| 国产日韩欧美91| 欧美一级高清免费| 欧美精品在线免费播放| 精品成人69xx.xyz| 深夜成人在线观看| 国产一区av在线| 亚洲性视频网址| 亚洲高清色综合| 国产精品三级在线| 国产成人avxxxxx在线看| 亚洲一区二区三区视频播放|