• Shell 实现文件基本操作(切割、排序、去重)


    使用Shell 自带的工具,实现对大文本文件的操作,满足日常数据处理的需求。

    一、命令 cut -切割

    cut 可实现对文本按列进行文本处理,特别适合于大文件的数据处理。
    基本语法是 cut [option] filename

    参数

    cut -f 列号,获取第几列;
    cut -c 以字符为单位分割;
    cut -d 以字节为单位分割,自动忽略多字节字符边界,如加 -n ,则不分割多字节字符;
    cut n- 指定第n列开始;
    cut n-m 指定从n列到m列;

    demo演示

    1)字节切割
    原始文件如下所示。
    在这里插入图片描述
    获取前两列。输入命令 cut info.text -d " " -f 1-2,自定义分割,按空格分割。
    在这里插入图片描述
    2)切割bash的PID
    在虚拟机中找到bash的信息,如下图所示。
    在这里插入图片描述
    执行命令 ps -aux | grep bash | head -n 1 | cut -d " " -f 8,查找bash进程,取第一行,空格分割,按列截取,取第8列,结果如下图所示。
    在这里插入图片描述

    二、命令 sort -排序

    sort 对文件进行排序,并将排序结果标准或重定向输出到指定文件。
    基本语法是 **sort [option] **

    参数

    sort -n 按照数值大小排序;
    sort -r 以相反的顺序排序;
    sort -t 分隔符 默认空格分隔符,排序时的分隔符;
    sort -k 指定需要排序的列;
    sort -o 将排序后的结果存入指定的文件;
    sort -u 结果唯一,即去重过的;

    demo演示

    1)排序
    原始文件如下所示。
    在这里插入图片描述
    执行命令 sort -t " " -k2n,2 infodata.txt,第二列按照数字升序排序,注意排序要指定从哪列到哪列,效果如下图所示。
    在这里插入图片描述
    上图结果中存在重复的数据,如何去重呢?
    在命令中添加 -uk1,2,完整命令 sort -t " " -k2n,2 -uk1,2 infodata.txt,效果如下所示。
    在这里插入图片描述
    如何将重复的数据打印出来呢?
    使用命令 sort infodata.txt | uniq -dc,效果如下图所示。
    在这里插入图片描述

    三、命令 uniq - 去重

    uniq 以行为单位,行与行之间比较去重,只能是对有序的文本进行有效的去重,因此与sort命令结合使用。
    基本语法是 **uniq [option] **

    参数

    uniq -c 统计行出现的次数;
    uniq -d 只显示重复行并去重;
    uniq -u 只显示唯一行;
    uniq -i 忽略大小写;
    uniq -f 忽略前N个字段,字段用空白字符分割;

    demo演示

    1)排序去重
    只展示出现一次的行,执行命令 sort infodata.txt | uniq -u,效果如下图所示。
    在这里插入图片描述

    对于有行号的文本文件处理,使用 -f 参数忽略第一个行号字段,对之后的字段去重处理。
    测试发现 sort 去重 似乎对最后一行不生效(最后一行重复未包含),在实际应用中再验证。

    参考博客

    【1】https://blog.csdn.net/qq_43382735/article/details/121007185

  • 相关阅读:
    nodejs+vue高校校图书馆elementui
    【Linux】动静态库
    IT专业入门,高考假期预习指南
    Python lxml库 提取并保存网页内容部分
    QT项目工程模块化管理代码之添加Pri文件及实现文件
    带你畅游 Kubernetes 调度器
    产品经历、运营人员必看:高效产品帮助文档撰写指南
    windows10 Docker Desktop中部署clickhouse
    怎么配置electron-updater
    openoffice启动和自动启动设置
  • 原文地址:https://blog.csdn.net/u012190388/article/details/125461494