linux-shell-sort,uniq,join,cut,paste,split

来源:互联网 发布:linux查找 编辑:程序博客网 时间:2024/05/01 01:37
inux-shell-sort,uniq,join,cut,paste,split-文件分类合并和分割
2008年08月08日 星期五 下午 03:29
sort

    排序
        -c 测试文件是否已经分类。
        -m 合并两个分类文件。
        -u 删除所有复制行。
        -o 存储sort结果的输出文件名
        -b 使用域进行分类时,忽略第一个空格。
        -n 指定分类是域上的数字分类。
        -t 域分隔符;用非空格或t a b键分隔域。
        -r 对分类次序或比较求逆。
        +n n为域号。使用此域号开始分类。
        n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
        post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始

    反序
    sort -t: -r video.txt

    去除重复行
    sort -u video.txt

    同时处理多个文件
    cat file1 file2 file3 | sort > outfile
    sort -m file1 file2 file3 > outfile


    1、sort特点:当查阅注册文件或为另一用户对下载文件重排文本列时方便。
  
    2、sort选项:
    sort命令一般格式:
    sort -cmu -o output_file [other options] +pos1 +pos2 input_files
  
    sort的参数:
    -c 测试文件是否已经分类。
    -m 合并两个分类文件。
    -u 删除所有复制行。
    -o 存储sort结果的输出文件名。
    -b 使用域进行分类时,忽略第一个空格。
    -n 指定分类是域上的数字分类。
    -t 域分隔符;用非空格或t a b键分隔域。
    -r 对分类次序或比较求逆。
    +n n为域号。使用此域号开始分类。
    n n为域号。在分类比较时忽略此域,一般与+n一起使用。
    post1 传递到m,n。m为域号,n为开始分类字符数;

    3、保存输出
    1)-o选项保存分类结果
    2)重定向方法

    4、sort启动方式
    sort执行时,先查看是否为域分隔设置了-t选项,如果设置了,则使用它来将记录分隔成域0、域1等等;
    如果未设置,用空格代替。缺省时sort将整个行排序.

    5、sort对域的参照方式
    注意:这里说的域和前面AWK一样是列的意思。
    注意:第一个域作为域0,域1是第二个域

    6、文件是否已分类
    使用sort -c filename 查看

    7、sort分类求逆
    逆向sort结果,使用- r选项

    8、按指定域分类
    $sort -t: t1 video.txt
    按第2域进行分类。

    9、数值域分类
    用- n选项
    $sot -t: t3n video.txt
    注意:数值域(即是数字格式的),即为数值分类

    10、唯一性分类
    - u选项进行唯一性
    $sot -u video.txt

    11、使用k的其他sort方法
    其他选项也可以使用k,主要用于指定分类域开始的字符数目
    $sort -t: -k4 video.txt
    使用k做分类键排序
    先以第4域,再以第1域分类,命令为-k4 -k1,
    $sort -t: -r -k4 -k1 video.txt

    12、指定sort序列
    sort +0 -2 +3
    该命令意即开始以域0分类,忽略域2,然后再使用域3分

    13、pos用法
    指定开始分类的域位置,另外一种方法:
    sort +field_number .characters_in
    意即从ield_number开始分类,但是要在此域的第characters_in个字符开始。
    $sort -t: +1.2 video.txt
    +1.2,意即以第1域最左边第3个字符开始分类.

    14、使用head和tail将输出分类
    显示部分结果的作用
    $sort -t: -r -K4 video.txt | head -1
    只显示一行。
    $sort -t: -r -K4 video.txt | tail -1
    只显示最后一行。
    使用head或tail时想省略显示行数,缺省时显示10行
    $head -20 filename
    显示前20行。
    $tail -6 filname
    显示后6行。

    15、awk使用sort输出结果
    可以为输出的结果加上一些头和尾等信息。

    16、将两个分类文件合并
    格式:sort -m sorted_file1 sorted_file2
    使用-m +o。将这个文件并入已存在的分类文件

    17、系统sort
    sort可以用来对/etc/passwd文件中用户名进行分类
    以第1域即注册用户名分类,然后管道输出结果到awk,awk打印第一域。
    $sort /etc/passwd | sort -t: +0 | awk -F":" '{print $1}'

    用于d f命令,以递减顺序打印使用列
    $df | sort -b -r +4
    用- b选项,忽略分类域前面的空格
    域4(+ 4),即容量列将分类求逆

    排序IP,分隔点是.
    $sort -t. +3n iplist


uniq

    uniq用来从一个文本文件中去除或禁止重复行
    uniq里意即持续不断重复出现的行,中间不夹杂任何其他文本
    注意:和前面的sort -u 不同。
  
    格式:
    uniq [选项] inputfile outputfile
  
    选项:
    -u 只显示不重复行。
    -d 只显示有重复数据行,每种重复行只显示其中一行
    -c 打印每一重复行出现次数。
    -f n为数字,前n个域被忽略。
    一些系统不识别- f选项,这时替代使用- n。


join

    (类似SQL中的Join)
    join用来将来自两个分类文本文件的行连在一起

    格式:
    join [optinos] inputfile1 inputfile2

    an   n 为一数字,用于连接时从文件n中显示不匹配行。
    o n.m   n为文件号,m为域号。1. 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。
    j n m    n为文件号,m为域号。使用其他域做连接域。
    t    域分隔符。用来设置非空格或t a b键的域分隔符。

    1) 不匹配连接
    $join -a1 file1 file2

    2)选择性连接
    使用- o选项选择连接域
    $join -o 1.1,2.2 file1 file2

    使用-jn m进行其他域连接,例如用文件1域3和文件域2做连接键
    join -j1 3 -j2 2 file1 file2


cut

    cut用来从标准输入或文本文件中剪切列或域,剪切文本可以将之粘贴到一个文本文件。
  
    cut一般格式为:
    cut [options] file1 file2

    可用选项:
    -c list   指定剪切字符数。
    -f field 指定剪切域数。
    -d    指定与空格和tab键不同的域分隔符。
    -c   用来指定剪切范围,如下所示:-c1,5-7 剪切第1个字符,然后是第5到第7个字符。
    -f    格式与- c相同,剪的是域。即列
    -f 1,5 剪切第1域,第5域。
    -f 1,10-12 剪切第1域,第1 0域到第1 2域。

    1)使用域分隔符
        $cut -d: -f3 file
  
    2)剪切指定域
    从文件/etc/passwd中剪切注册名及缺省根目录,需抽取域1和域6:
        $cut -d: -f1,6 /etc/passwd


paste

    粘贴

    paste -d -s -file1 file2
            -d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
            -s 将每个文件合并成行而不是按行粘贴。
            - 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出

    paste可以将这些数据粘贴起来形成相关文件
    粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。
    缺省情况下, paste连接时,用空格或tab键分隔新行中不同文本,除非指定- d选项
  
    paste格式为;
    paste -d -s -file1 file2
  
    选项含义如下:
    -d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
    -s 将每个文件合并成行而不是按行粘贴。
    - 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。
  
    1)指定列
    通过交换文件名即可指定哪一列先粘
  
    2)paste命令管道输入
    以一个4列格式显示目录列表,使用空格作域分隔符
    $ls /etc | paste -d" " - - - -
  
    3)要合并两行,而不是按行粘贴,可以使用- s选项


split

    分割
    split -output_file-size input-filename output-filename

    split用来将大文件分割成小文件
    s p l i t命令一般格式:
    split -output_file-size input-filename output-filename
    -output_file-size指的是文本文件被分割的行数
    最多1000行分割
    每个文件格式为x [aa]到x[zz],x为文件名首字母[可以自己定], [aa]、[zz]为文件名剩余部分顺序字符组合。
    后面是按aa ab ac 这样的顺序来的。


head,tail

    头 10 行发送至标准输出
    尾 10 行发送至标准输出


tac

    逆序排序文件
    tac 由 cat 逆序拼写而成

    ls -l |tail | tac




原创粉丝点击