zoukankan      html  css  js  c++  java
  • linux shell 脚本攻略学习8---md5校验,sort排序,uniq命令详解

    一、校验与核实

     目前最为出名的校验技术是md5sum和sha1sum,它们对文件内容使用相应的算法来生成校验和。

    举例:

    amosli@amosli-pc:~/learn$ md5sum text.txt 
    186931e2ff7cb0cde2c17b2298be604c  text.txt

    如上所示,使用md5sum生成了一个由32个字符组成的十六进制串。

    可以将输出的校验重定向到一个文件中,然后再用这个md5文件来核实数据的完整性:

    amosli@amosli-pc:~/learn$ md5sum text.txt > md5_text.txt
    amosli@amosli-pc:~/learn$ cat md5_text.md5 
    186931e2ff7cb0cde2c17b2298be604c  text.txt

    md5sum的计算方法:

    md5sum file1 file2 file3 ...

    举例:

    amosli@amosli-pc:~/learn$ md5sum text.txt out.txt output.txt 
    186931e2ff7cb0cde2c17b2298be604c  text.txt
    ce4ff16bd0044c0831a83fc1eca981eb  out.txt
    8a6b721e2d5925b78a4c8f4c82dda4bf  output.txt

    如何检验文件是否所提供的.md5相匹配?

    amosli@amosli-pc:~/learn$ md5sum -c md5_text.md5 
    text.txt: OK

    SHA1是另一种常用的算法,与md5极为相似。

    举例:

    amosli@amosli-pc:~/learn$ sha1sum text.txt 
    30ede30817e1d3a8a15d903187899c2bccd7ad8f  text.txt
    amosli@amosli-pc:~/learn$ sha1sum text.txt > sha1_text.sha1
    amosli@amosli-pc:~/learn$ sha1sum -c sha1_text.sha1 
    text.txt: OK

    不同的是sha1输出的是长度为40位的十六进制串,另外,文件后缀名也由.md5改为sha1。

    二、排序、单一和重复

    sort命令进行排序,uniq命令是从stdin(标准输入)或文本中提取单一的行,sort和uniq能够用来查找重复的数据.

    举例:

    sum.txt

    amosli@amosli-pc:~/learn$ cat sum.txt 
    5
    4
    3
    5
    4
    3

    对sum.txt进行默认排序:

    amosli@amosli-pc:~/learn$ sort sum.txt 
    3
    3
    4
    4
    5
    5

    去除sum.txt中的重复数值:

    amosli@amosli-pc:~/learn$ sort sum.txt | uniq
    3
    4
    5

    sort命令详解:

    1、按数字进行排序,参数-n

    sort -n file.txt

    上面举例即是按数字进行排序的。

    2、按逆序进行排序,参数-r

    sort -r file.txt

    举例:

    amosli@amosli-pc:~/learn$ sort -r sum.txt 
    5
    5
    4
    4
    3
    3

    3、按月份进行排序,参数-M

    sort -M months.txt

    举例:

    amosli@amosli-pc:~/learn$ cat  months.txt
    一月
    十月
    五月
    
    amosli@amosli-pc:~/learn$ sort -M months.txt 
    
    一月
    五月
    十月

    4、合并排序过的文件,-m参数

    sort -m sorted1 sorted2

    如果需要合并两个排过序的文件,而且不需要对合并后的文件再进行排序,可以使用如上式子。

    5、依据键或列进行排序,-k参数

    举例:

    data.txt

    amosli@amosli-pc:~$ cat data.txt 
    1 mac 2000
    2 winxp 4000
    3 win8.1 1000
    4 linux 1000

    -k指定了排序应该执照哪一个键(key)来进行。键指的是列号。

    如下:

    1)按第1列,逆序排列

    amosli@amosli-pc:~$ sort -nrk 1 data.txt
    4 linux 1000
    3 win8.1 1000
    2 winxp 4000
    1 mac 2000

    2)按第2列排列

    amosli@amosli-pc:~$ sort -k 2 data.txt 
    
    4 linux 1000
    1 mac 2000
    3 win8.1 1000
    2 winxp 4000

     6、其他参数

    -z参数,为了使sort的输出与以'' 作为参数终止符的xargs命令相兼容,采用下面的命令:

    sort -z data.txt | xargs -0
    
    amosli@amosli-pc:~$ sort -z data.txt | xargs -0
    1 mac 2000
    2 winxp 4000
    3 win8.1 1000
    4 linux 1000

    -b参数,用于忽略文件中的前导空白字符,-d参数用于指明以字典序进行排序。

    amosli@amosli-pc:~$ sort -bd data.txt 
    
    1 mac 2000
    2 winxp 4000
    3 win8.1 1000
    4 linux 1000

    uniq命令详解:

    uniq命令用于通过消除重复内容,只能用于排过序的数据输入,因此,uniq要么使用管道,要么将排过序的文件作为输入。

    举例:

    sorted.txt

    amosli@amosli-pc:~$ cat sorted.txt 
    hi
    amos
    hi
    bash

    使用uniq过滤重复的值

    amosli@amosli-pc:~$ sort sorted.txt | uniq
    
    amos
    bash
    hi

    1、参数-u,只显示唯一的行(在输入文件中没有出现重复的行)

    amosli@amosli-pc:~$ sort sorted.txt | uniq -u
    
    amos
    bash

    2、参数-c,统计各行在文件中出现的次数

    amosli@amosli-pc:~$ sort sorted.txt | uniq -c
          1 
          1 amos
          1 bash
          2 hi

    3、参数-d,查找文件中出现重复的行

    amosli@amosli-pc:~$ sort sorted.txt | uniq -d
    hi

    4、参数-s,-w指定键

    -s 指定可以跳过前N个字符;

    -w指定用于比较的最大字符数。

    举例:

    da.txt

    amosli@amosli-pc:~$ cat da.txt 
    u:01:gnu
    d:04:linux
    u:01:bash
    u:01:hack
    amosli@amosli-pc:~$ sort da.txt | uniq -s 2 -w 2
    
    d:04:linux
    u:01:bash

    忽略前2个字符(-s 2),指定用于比较的最大字符数方式来选定该键(-w 2)

    5.-z参数,生成包含0值字节终止符的输出,与sort -z命令类似

    amosli@amosli-pc:~$ uniq -z da.txt
    u:01:gnu
    d:04:linux
    u:01:bash
    u:01:hack

     

  • 相关阅读:
    osu合集(期望dp)
    P1640 [SCOI2010]连续攻击游戏
    P2155 [SDOI2008]沙拉公主的困惑
    P3419 [POI2005]SAMToy Cars / SP688 SAM Toy Cars
    P3586 [POI2015]LOG
    P4147 玉蟾宫
    P4454 [CQOI2018]破解DH协议
    射击小游戏一02(玩家和怪物添加)
    ASCII,Unicode和UTF8
    Android中MenuInflater实例
  • 原文地址:https://www.cnblogs.com/amosli/p/3488390.html
Copyright © 2011-2022 走看看