最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell實(shí)現(xiàn)文本去重并操持原有順序

 更新時(shí)間:2015年03月17日 09:03:41   投稿:junjie  
這篇文章主要介紹了Shell實(shí)現(xiàn)文本去重并操持原有順序,本文分步驟講解如何解決需求,并給出了若干方法,需要的朋友可以參考下

簡(jiǎn)單來(lái)說(shuō),這個(gè)技巧對(duì)應(yīng)的是如下一種場(chǎng)景

假設(shè)有文本如下

復(fù)制代碼 代碼如下:

cccc
aaaa
bbbb
dddd
bbbb
cccc
aaaa

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

cccc
aaaa
bbbb
dddd

當(dāng)然,這個(gè)問(wèn)題本身并不難,用C++或python寫(xiě)起來(lái)都很容易,但所謂殺機(jī)焉用牛刀,能用shell命令解決時(shí),它永遠(yuǎn)都是我們的首選。答案在最后給出,下面說(shuō)說(shuō)我是如何想到這樣

我們有時(shí)候想把自己的目錄加入環(huán)境變量PATH時(shí)會(huì)在~/.bashrc文件中這樣寫(xiě),比如待加入的目錄為$HOME/bin

復(fù)制代碼 代碼如下:

export PATH=$HOME/bin:$PATH

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

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

再執(zhí)行source ~/.bashrc時(shí),$HOME/bin目錄在PATH中其實(shí)會(huì)有兩份記錄,雖然這不影響使用,但對(duì)于一個(gè)強(qiáng)迫癥來(lái)說(shuō),這是無(wú)法忍受的,于是問(wèn)題就變成了,我們需要去掉$PATH里重復(fù)的路徑,并且保持原有路徑順序不變,也就是原本誰(shuí)在前面,去重后仍舊在前面,因?yàn)樵趫?zhí)行shell命令時(shí)是從第一個(gè)路徑開(kāi)始查找的,所以順序很重要

好了,說(shuō)了這么多我們來(lái)揭示最終的結(jié)果,以文章開(kāi)始的數(shù)據(jù)為例,假設(shè)輸入文件是in.txt,命令如下

復(fù)制代碼 代碼如下:

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

這些都是很簡(jiǎn)單的shell命令,下面稍作解釋
復(fù)制代碼 代碼如下:

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

大家可以從第一條命令開(kāi)始,并依次組合,看看實(shí)際輸出效果,那樣便更容易理解了。對(duì)于$PATH中的重復(fù)路徑又該如何處理呢,還是以前面的例子來(lái)說(shuō),只需在前后用tr做一下轉(zhuǎn)換即可

復(fù)制代碼 代碼如下:

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' ':'`

其實(shí)這樣使用PATH會(huì)有個(gè)問(wèn)題,比如我們執(zhí)行了以上命令后,如果想去掉$HOME/bin這個(gè)路徑,僅僅修改為如下內(nèi)容是不夠的
復(fù)制代碼 代碼如下:

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' ':'`

因?yàn)槲覀円呀?jīng)將$HOME/bin加入了$PATH中,這樣做并沒(méi)有起到刪除的作用,也許最好的方式還是自己清楚的知道所有路徑,然后顯示指定,而不是采取追加的方式

相關(guān)文章

  • Shell腳本避免重復(fù)執(zhí)行的方法

    Shell腳本避免重復(fù)執(zhí)行的方法

    這篇文章主要介紹了Shell腳本避免重復(fù)執(zhí)行的方法的,本文給出的代碼只要放在需要執(zhí)行的腳本頭部即可避免重復(fù)執(zhí)行,非常方便實(shí)用,需要的朋友可以參考下
    2015-01-01
  • ubuntu 解決libsqlite3-0依賴(lài)的問(wèn)題(推薦)

    ubuntu 解決libsqlite3-0依賴(lài)的問(wèn)題(推薦)

    下面小編就為大家?guī)?lái)一篇ubuntu 解決libsqlite3-0依賴(lài)的問(wèn)題(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • bash腳本輸入密碼不回顯問(wèn)題的解決方法

    bash腳本輸入密碼不回顯問(wèn)題的解決方法

    編寫(xiě)一個(gè)bash腳本時(shí),需要用戶(hù)輸入一個(gè)密碼,方可繼續(xù)后續(xù)流程,但是又要保證用戶(hù)輸入的密碼不會(huì)被別人看到,因此排除了通過(guò)參數(shù)將密碼傳入腳本的方案
    2013-08-08
  • Linux中常用資源監(jiān)控命令總結(jié)

    Linux中常用資源監(jiān)控命令總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Linux中常用的資源監(jiān)控命令,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • linux定時(shí)任務(wù)基礎(chǔ)命令介紹(14)

    linux定時(shí)任務(wù)基礎(chǔ)命令介紹(14)

    這篇文章主要為大家詳細(xì)介紹了linux定時(shí)任務(wù)基礎(chǔ)命令,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Shell腳本獲取進(jìn)程的運(yùn)行時(shí)間

    Shell腳本獲取進(jìn)程的運(yùn)行時(shí)間

    這篇文章主要介紹了Shell腳本獲取進(jìn)程的運(yùn)行時(shí)間,需要的朋友可以參考下
    2014-06-06
  • putty實(shí)現(xiàn)自動(dòng)登錄的方法(ssh和ssh2)

    putty實(shí)現(xiàn)自動(dòng)登錄的方法(ssh和ssh2)

    這篇文章主要介紹putty實(shí)現(xiàn)自動(dòng)登錄的方法,需要的朋友可以參考下
    2013-02-02
  • Linux touch命令使用示例

    Linux touch命令使用示例

    我們平時(shí)用得最多的是通過(guò)touch創(chuàng)建一個(gè)空文件,實(shí)際上通過(guò)touch命令可以修改文件的atime、mtime,所以文件的真實(shí)訪(fǎng)問(wèn)時(shí)間和修改時(shí)間是可以被修改,我們?cè)谂挪橄到y(tǒng)異常的時(shí)候還需要結(jié)合日志、歷史命令等等因素綜合決策,本文介紹Linux touch命令,需要的朋友可以參考下
    2023-03-03
  • 詳解linux下利用crontab創(chuàng)建定時(shí)任務(wù)

    詳解linux下利用crontab創(chuàng)建定時(shí)任務(wù)

    這篇文章主要介紹了linux下利用crontab創(chuàng)建定時(shí)任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • shell中刪除文件中重復(fù)行的方法

    shell中刪除文件中重復(fù)行的方法

    這篇文章主要介紹了shell中刪除文件中重復(fù)行的方法,需要的朋友可以參考下
    2014-03-03

最新評(píng)論

乐都县| 轮台县| 太康县| 修文县| 东乌珠穆沁旗| 应城市| 房山区| 阳谷县| 神农架林区| 冀州市| 垣曲县| 乌鲁木齐县| 遵化市| 水城县| 潢川县| 赤峰市| 离岛区| 定远县| 延边| 孟津县| 晋城| 梁平县| 五台县| 十堰市| 聂拉木县| 雅安市| 确山县| 郴州市| 桑日县| 界首市| 光山县| 从化市| 灵宝市| 沂南县| 肥西县| 蒲城县| 庄河市| 家居| 清苑县| 伊通| 布尔津县|