zoukankan      html  css  js  c++  java
  • 2.9排序、唯一与重复

    sort命令能够帮助我们队文本文件和stdin进行排序操作。它通常会配合其他命令来生成所需要的输出。uniq是一个经常与sort一同使用的命令。它的作用是从文本或stdin中提取唯一(或重复)的行。

    1、sort命令既可以从特定的文件,也可以从stdin中获取输入,并将输出写入stdout。uniq和sort的工作方式一样。

    a、可以按照下面的方式对一组文件进行排序:

    $sort file1.txt file2.txt >sorted.txt

    或是

    $ sort file1.txt file2.txt -o sorted.txt

    b、按照数字顺序进行排序:

    $ sort -n file.txt

    c、按照逆序进行排序:

    $ sort -r file.txt

    d、按照月份进行排序

    $sort -M months.txt

    e、合并两个已排序过的文件;

    $sort -m sorted1 sorted2

    f、找出已排序文件中不重复的行:

    $sort file1.txt file2.txt | uniq

    g、检查文件是否已经排序过

    #!/bin/bash

    #功能描述:排序

    sort -C filename;

    if [ $? -eq 0 ] ; then

      echo Sorted;

    else

      echo Unsorted;

    fi

    将filename替换成你需要进行检查的文件名,然后运行该脚本。

    2、工作原理

    sort命令包含大量的选项,能够对文件数据进行各种排序。如果使用uniq命令,那sort更是必不可少,因为前者要求输入数据必须经过排序。

    要检查文件是否排序过,可以采用以下方法:如果文件已经排序,sort会返回为0的退出码($?),否则返回非0.

    3、补充内容

    a、依据键或列进行排序

    按列将下面的文本排序

    $ cat data.txt

    1 mac  2000

    2 winxp 4000

    3 bsd   1000

    4 linux  1000

    有多重方法对这段文本进行排序。目前它是按照序号第一列来排序的。也可以依据第二列和第三列来排序。

    -k指定了排序应该按照哪一个键(key)来进行。键指的是列号,而列号就是执行排序时的依据。-r 告诉sort命令按照逆序进行排序。如

    eg;依据第一列,以逆序形式排序

    $ sort -nrk 1 data.txt

    其中,-nr表明按照数字,采用逆序形式排序

    依据第2列进行排序

    $sort -k 2 data.txt

    注意:一定要留意用于按数字顺序进行排序的选项-n。sort命令对于字母表排序和数字排序有不同的处理方式。因此,如果要采用数字顺序排序,就应该明确地给出-n选项。

    通常在默认情况下,键就是文本文件中的列。列与列之间用空格分隔。

    但有时候,我们需要将特定范围内的一组字符(如:key1=character4-character8)作为键。在这种情况下,必须明确地将键指定为某个范围内的字符,这个范围可以用键起止的字符位置来表明。如:

    $cat data.txt

    1010hellothis

    2189ababbba

    7464dfddfdfd

    $sort -nk 2,3 data.txt

    把醒目的字符作为数值键。为了提取这个键,用字符在行内的起止位置作为键的书写格式(在上面的例子中,起止位置是2和3).

    用第一个字符作为键:

    $sort -nk 1,1 data.txt

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

    $sort -z data.txt | xargs -0

    #终止符用来保证xargs命令的使用安全

    如果要忽略掉文本中的空格,以字典序进行排序,可以使用:

    $sort -bd unsorted.txt

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

    2、uniq

    uniq命令通过消除重复内容,从给定输入中(stdin或命令行参数文件)找出唯一的行。它也可以用来找出输入中出现的重复行。

    uniq只能作用于排过序的数据输入,因此,uniq要么使用管道,要么将排过序的文件作为输入,与sort命令结合使用。

    eg:

    $cat sorted.txt

    bash

    foss

    hack

    hack

    $uniq sorted.txt

    bash

    foss

    hack

    或是$sort unsorted.txt | uniq

    只显示唯一的行(在输入文件中没有重复出现的行)

    $uniq -u sorted.txt

    bash

    foss

    或是$sort unsorted.txt |uniq -u

    要统计各行在文件中出现的次数,使用

    $sort unsorted.txt |uniq -c

    1 bash

    1 foss

    2 hack

    找出文件中重复的行

    $sort unsorted.txt |uniq -d

    hack

    可以结合-s 和-w来指定键:

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

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

  • 相关阅读:
    【YbtOJ#911】欧拉函数
    【CF590E】Birthday
    打印控件的区别
    RPA教程
    UiPath培训教程
    RPA视频教程
    搭建samba服务
    kvm虚拟机在线扩容
    zabbix监控交换机
    UiPath Level3讲解
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6169269.html
Copyright © 2011-2022 走看看