Linux之文本處理軟件awk

awk默認(rèn)是以行為單位處理文本的,對(duì)test.txt中的每一行都執(zhí)行后面 "{ }" 中的語句。

  • 若有一個(gè)需要重新格式化的字典test.txt(用戶名、密碼、地址):
    xiaosan sadasdw jiaozuo
    234wer  asdfasd asdas
    1111    aaaa    cccc
    2222    aaaa    degd
    1111    aaaa    cccc
    3333    aaaa    dfger
    21asd   sdfsd   sadasd
    dwqx    asds    sasdfcv
  • 要求:
    1.里面有重復(fù)數(shù)據(jù),使用命令去重
    2.提取出用戶名和密碼 每一行前面加上id數(shù)字,遞增。
    3.只提取出密碼作為爆破字典
    4.某些公司都是一個(gè)公司前綴+姓名簡(jiǎn)寫,所以為用戶名一欄全部改為uv_用戶名
    5.提取出密碼一列,有些密碼爆破成功率高,所以增加一列,標(biāo)出密碼出現(xiàn)次數(shù)

去重:

[wyb@localhost ~]$ cat test.txt | awk '!a[$1]++'
[wyb@localhost ~]$ cat test.txt | uniq //作用和上面命令相同
aosan sadasdw jiaozuo
234wer  asdfasd asdas
1111    aaaa    cccc
2222    aaaa    degd
3333    aaaa    dfger
21asd   sdfsd   sadasd
dwqx    asds    sasdfcv

去重、添加id:

一般字典不需要id、user、pass等標(biāo)示符,這里只是為了便于觀看

[wyb@localhost ~]$ cat test.txt | awk '!a[$1]++' | awk -F '\t' '{print "id:"NR"\tuser:"$1"\tpass:"$2"\taddress:"$3}' | column -t  //最后一個(gè)命令可以將列對(duì)齊
id:1    user:aosan      pass:sadasdw    address:jiaozuo
id:2    user:234wer     pass:asdfasd    address:asdas
id:3    user:1111       pass:aaaa       address:cccc
id:4    user:2222       pass:aaaa       address:degd
id:5    user:3333       pass:aaaa       address:dfger
id:6    user:21asd      pass:sdfsd      address:sadasd
id:7    user:dwqx       pass:asds       address:sasdfcv

去重、添加id、添加公司前綴:

[wyb@localhost ~]$ cat test.txt | awk '!a[$1]++' | awk -F '\t' '{print "id:"NR"\tuser:uv_"$1"\tpass:"$2"\taddress:"$3}'
id:1    user:uv_aosan   pass:sadasdw    address:jiaozuo
id:2    user:uv_234wer  pass:asdfasd    address:asdas
id:3    user:uv_1111    pass:aaaa       address:cccc
id:4    user:uv_2222    pass:aaaa       address:degd
id:5    user:uv_3333    pass:aaaa       address:dfger
id:6    user:uv_21asd   pass:sdfsd      address:sadasd
id:7    user:uv_dwqx    pass:asds       address:sasdfcv

去重然后輸出密碼:

[wyb@localhost ~]$ cat test.txt | awk '!a[$1]++' | awk -F '\t' '{print "pass:"$2}'
pass:sadasdw
pass:asdfasd
pass:aaaa
pass:aaaa
pass:aaaa
pass:sdfsd
pass:asds

輸出密碼、得到密碼出現(xiàn)次數(shù):

下面的'a[$1]++'是按第一列來去重的,若有兩條數(shù)據(jù)只有第一列重復(fù)則成功,可以用$0按行來去重
[wyb@localhost ~]$ cat test.txt | awk '!a[$1]++' | awk -F '\t' '{print $2}' | awk '{a[$1]++} END {for (j in a) print a[j],j}'
1 sadasdw
1 sdfsd
1 asdfasd
1 asds
3 aaaa

uniq 只能去除挨著的重復(fù)數(shù)據(jù),所以先sort升序排序,然后uniq -c統(tǒng)計(jì)重復(fù),再sort -r降序排序
cat test.txt | awk '{print $2}' | sed '1d' |sort | uniq -c |sort -r

其他:

對(duì)'!a[$1]++'的解釋如下:

  • a[e54r56wer]為空,!a[e54r56wer]為真,可以輸出,然后++
  • 若再來一個(gè)a[e54r56wer],因?yàn)樯弦徊揭呀?jīng)++,此時(shí)值為1,!a[e54r56wer]為假,不輸出,再++

對(duì)for輸出數(shù)組的解釋如下:

  awk '{a[$1]++} END {for (j in a) print a[j],j}' test.txt
  • 在遍歷完文件后,通過END把后面的句子連起來
  • for (j in a) 是指打印數(shù)組a的下標(biāo),并定義下標(biāo)為變量j
  • 最后print a[j],j就是打印數(shù)組下標(biāo)和數(shù)組,這樣就相同的$1排重并計(jì)數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,391評(píng)論 0 17
  • 個(gè)人學(xué)習(xí)批處理的初衷來源于實(shí)際工作;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求,從而在測(cè)試過程中就重復(fù)涉及到...
    Luckykailiu閱讀 5,003評(píng)論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,894評(píng)論 18 399
  • WIN+R
    hey_沙子閱讀 2,121評(píng)論 0 9

友情鏈接更多精彩內(nèi)容