码迷,mamicode.com
首页 > 编程语言 > 详细

七、文件的排序、合并和分割

时间:2021-02-20 12:29:58      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:header   读取文件   反选   分割   container   逆向   文件名   保存到文件   ctrl+h   

1 概述

sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令和tar命令,能够实现对文件记录排序、统计、合并、提取、粘贴、分隔、过滤、压缩和解压等功能。

2 sort命令

  • 定义

    sort命令将输入文件看做由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符作为定界符。

  • 说明

    1. 可将记录分成多个域进行处理,默认的域分隔符是空格符,域分隔符可由用户指定其他符号
  • 语法

    sort [选项] [输入文件]
    
    • sort命令选项及其意义

      选项 意义
      -c 测试文件是否已经被排序
      -k 指定排序的域
      -m 合并两个已排序的文件
      -n 根据数字大小进行排序
      -o [输出文件] 将输出写到指定的文件,相当于将输出重定向到指定文件
      -r 将排序结果逆向显示
      -t 改变域分隔符
      -u 去除结果中的重复行
  • sort命令的用法

    1. -t选项

      sort命令分域对文件进行排序,默认的域分隔符是空格符,-t选项可用于设置分隔符。

      sort -t: filename
      # -t与":"之间没有空格
      # sort命令默认根据第1域对数据记录进行排序,如果第1域相同,再根据第2域排序,以此类推
      # 当未指定-t时,分隔符是空格符,这时记录内开头与结尾的空格都将被忽略
      # 当用-t选项改变分隔符时,空格符变得有意义
      
    2. -k选项

      -k选项指定排序的域。

      sort命令以1表示第1域、以2表示第2域,依次类推。

      sort -t: -k3 /etc/passwd
      # -k和3之间也没有空格
      
    3. -n选项

      -n选项可以指定根据数字大小进行排序

      sort -t: -k3n /etc/passwd
      # -n选项不单独使用,一般放在域号之后
      
    4. -r选项

      -r选项用于将排序结果逆向显示

      sort -t: -k3nr /etc/passwd
      # 利用-k3n选项将/etc/passwd文件的第3域从小到大排序,然后用-r选项将结果逆向显示
      
    5. -u选项

      -u选项用于去除排序结果中的重复行

      sort -t: -u
      
    6. -o选项

      sort命令默认将排序后的结果输出到屏幕上

      sort -t: -k1n -o outfile /etc/passwd
      
    7. -c选项

      -c选项用于测试文件是否已经排好序

      sort -t: c /etc/passwd
      
    8. -m选项

      -m选项用于将两个排好序的文件合并成一个排好序的文件

      在文件合并前,他们必须已经排好序

      sort -t: m filename1 filename2
      

3 uniq命令

uniq命令用于去除文本文件中的重复行。

  • uniq和sort -u命令的区别
  1. uniq命令去除的重复行必须是连续重复出现的行,中间不能夹杂任何其他文本行
  2. sort -u命令则是去除所有的重复记录
  • uniq命令选线及其意义

    选项 意义
    -c 打印每行在文本中重复出现的次数
    -d 只显示有重复的记录,每个重复记录只出现一次
    -u 只显示没有重复的记录
  • 语法

    uniq -c /etc/passwd
    

4 join命令

  • 定义

join命令用于实现两个文件中记录的连接操作,即连接操作将两个文件中具有相同域的记录选择出来,再将这些记录所有的域放到一行(包含来自两个文件的所有域);

join命令在对两个文件进行连接时,两个文件必须都是按照连接域排好序的,按其他域排序无效。

  • 语法

    join [选项] 文件1 文件2
    
  • join命令选项及其意义

    选项 意义
    -a1或-a2 除了显示以共同域进行连接的结果外,-a1表示还显示第1个文件中没有共同域的记录,-a2则表示显示第2个文件中没有共同域的记录
    -i 比较域内容时,忽略大小写差异
    -o 设置结果显示的格式
    -t 改变域分隔符
    -v1或-v2 与-a选项类似,但是,不显示以共同域进行连接的结果
    -1和-2 -1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域
    • 说明

      1. -a和-v选项的区别在于

        -a选项显示以共同域进行连接的结果,而-v选项则不显示这些记录

      2. join命令的结果默认不显示未进行连接的记录,即默认显示连接记录在两个文件中的所有域,而且是按顺序来显示的。

      3. -o选项用于改变结果显示的格式,可指定显示哪几个域、按什么顺序显示这些域

        join -t: -o1.1 2.2 1.2 filename1 filename2
        
      4. join命令默认比较文件1和文件2的第1域,当需要通过其他域进行连接,可使用-1和-2选项,-1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域

        join -t: -i -1 3-2 1 filename1 filename2
        # 以文件1的第3域和文件2的第1域进行连接,并忽略大小写
        

5 cut命令

  • 定义

    cut命令用于从标准输入或文本文件中按域或行提取文本

  • 语法

    cut [选项] 文件
    
    • cut命令选项及其意义

      选项 意义
      -c 指定提取的字符数或字符范围
      -f 指定提取的域数或域范围
      -d 改变域分隔符
    • 示例

      cut -c3 /etc/passwd
      
      cut -c1-5 /etc/passwd
      # -c后跟数字表示字符数或字符范围,共3种表示方式
      (1) -cn表示第n个字符
      (2) -cn,m表示第n个字符和第m个字符
      (3) -cn-m表示第n个字符到第m个字符
      
      cut -d: -f1,4 /etc/passwd
      # 提取第1,4域
      
      cut -d: -f1-4 /etc/passwd
      # 提取第1~4域
      
  • 说明

    cut命令灵活提取文本文件中的内容,它默认将提取的内容放到标准输出上,如果要将提取的内容保存到文件,可以使用文件重定向来实现。

6 paste命令

  • 定义

    paste命令用于将文本文件或标准输出中的内容粘贴到新的文件,它可以将来自不同文件的数据粘贴到一起,形成新的文件。

  • 语法

    paste [选项] 文件1 文件2
    
    • paste命令选项及其意义

      选项 意义
      -d 默认域分隔符是空格或tab键,设置新的域分隔符
      -s 将每个文件粘贴成一行
      - 从标准输入中读取数据
    • 说明

      paste命令不同于sort、join和cut命令改变域分隔符都是为了按域读取文件内容,paste命令改变域分隔符是用于设置输出文件的格式。

    • 示例

      paste -d: filename1 filename2
      

7 split

  • 定义

    split命令用于将大文件切割成小文件,split命令可以按照文件的行数、字节数切割文件,并能在输出的多个小文件中自动加上编号

  • 语法

    split [选项] 待切割的大文件 输出的小文件
    
    • 选项及其意义

      选项 意义
      -或-l 此两个选项等价,都用于指定切割成小文件的行数
      -b 指定切割成小文件的字节
      -C 与-b选项类似,但是,切割时尽量维持每行的完整性
  • 示例

    # 每2行进行切割,输出文件的以小文件名字开头命名
    split -2 /etc/passwd
    
    --说明
    - 由于小文件有多个,split命令在小文件名后面自动加上编号以区分不同的小文件,编号为aa~zz
    - split命令所切割生成的小文件最多包含1000行记录
    
    # 按每100B切割成小文件
    split -b100 /etc/passwd
    
    --说明
    - 当split命令不指定小文件的名字时,将自动以x开头、aa~zz为编号对这些小文件进行命名
    - split命令-b选项在切割文件时仅考虑了文件大小,未考虑记录的完整性
    

8 tr命令

  • 定义

    tr命令实现字符转换功能,其功能类似于sed命令

  • 语法

    tr [选项] 字符串1 字符串2 <输入文件
    
    • 选项及其意义

      选项 意义
      -c 选定字符串1中字符集的补集,即反选字符串1中的字符集
      -d 删除字符串1中出现的所有字符
      -s 删除所有重复出现的字符序列,只保留一个
    • 说明

      1. "<输入文件" 表示将输入文件重定向到标准输入,tr命令只能从标准输入读取数据
      2. tr命令要么将输入文件重定向到标准输入,要么从管道读入数据。
    • 示例

      tr -d a-z </etc/passwd
      # 删除/etc/passwd中所有的小写字母
      tr -d 0-9 </etc/passwd
      # 删除/etc/passwd中所有的数字
      tr -d "[\n]" </etc/passwd
      
      • tr命令支持正则表达式的一部分以及POSIX字符类

        选项 意义 八进制方式
        \a Ctrl+G 铃声 \007
        \b Ctrl+H 退格符 \010
        \f Ctrl+L 走换行页 \014
        \n Ctrl+J 换行符 \012
        \r Ctrl+M 回车键 \015
        \t Ctrl+I Tab键 \011
      # tr -s 能将重复出现的字符串压缩为一个字符
      # 空白行可以看做该行只有一个换行符而无其他任何字符
      tr -s "[\n]" </etc/passwd
      
      # 将所有重复的字母压缩成一个
      tr -s "[a-z],[A-Z]" </etc/passwd
      
      # tr命令加上字符串1和字符串2,将字符串1用字符串2来替换
      tr "[a-z]" "[A-Z]" </etc/passwd
      
      tr "[:lower:]" "[:upper:]" </etc/passwd
      
      # 将不在"[a-z][A-Z]"字符集内的字符替换为换行符
      # 然后-s选项将重复出现的换行符压缩成一个
      tr -cs "[a-z][A-Z]" "[\012*]" </etc/passwd
      

9 tar命令

  • 定义

    tar命令实现了Linux系统文件的压缩和解压缩

  • 语法

    tar [选项] 文件名或目录名
    
    • 选项及其意义

      选项 意义
      -c 创建新的包
      -r 为包添加新的文件
      -t 列出包内容
      -u 更新包中的文件,若包中无此文件,则将该文件添加到包中
      -x 解压缩文件
      -f 使用压缩文件或设备,该选项通常是必选的
      -v 详细报告tar处理文件的信息
      -z 用gzip压缩和解压缩文件,若加上此选项创建压缩包,那么解压缩时也需要加上此选项
    • 说明

      #gzip -d 能将tar.gz文件还原为.tar文件,gzip -d解压缩压缩文件而得到包
      gazip -d db.tar.gz
      

七、文件的排序、合并和分割

标签:header   读取文件   反选   分割   container   逆向   文件名   保存到文件   ctrl+h   

原文地址:https://www.cnblogs.com/nuochengze/p/14417970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!