Linux下的一些文本处理命令的学习


一般认为,Linux/Unix系统的设计哲学是,提供各种灵活的组件,让用户可以通过类似搭积木的方式去组装这些组件来完成所要完成的任务。灵活性非常高,可使得用户获得极大的自由。

所以,根据Unix设计哲学设计出来的各种工具都非常小巧,因为在他们看来:小即是美(小程序易于理解、小程序易于维护、小程序消耗的系统资源较少、小程序容易与其他工具相结合)。每一个工具/程序只需专心做好一件事,然后用管道这个黏合剂将各个命令组合起来可以完成各种各样的功能。

下面我将要介绍的一些命令很多都是内置在各Linux发行版中的,都不需要额外的安装,即使安装起来也是非常简单。

  • rev #将文件的每行内容以字符为单位反序{每一行的位置不变}
  • tac #将文件以行为单位反序{第1行变成最后1行……}
  • nl #计算行号过滤器{nl filename将会把filename文件的所有内容都输出到stdout上,但是会在每个非空行的前面加上连续的行号。如果没有filename参数,那么就操作stdin。nl命令的输出与cat -n非常相似,然而,默认情况下nl不会列出空行}
  • sort #起排序作用,如果想深入了解可以通过“man sort”命令进行查看,下面会有几个小例子看着看着就会用了,实在不行在最后还有个延伸阅读的链接可以看看
  • uniq #删除连续相连的重复行,一般是通过管道接在sort命令的后面,两者共同起到排序、去重的作用
  • cut #从文件中提取特定域/列。这个命令与awk中使用的print $N命令很相似,不过在脚本中使用cut命令会比使用awk命令来得更直接一些。常用选项就是-d(字段定界符)和-f(域分隔符)选项。
  • paste #按列进行合并,在某些特定的场合非常有用
  • join #这个命令和paste命令很像。但是它具有更多的功能。它能够以一种特殊的形式来合并两个文件,这种特殊的形式本质上就是一个关联数据库的简单版本。join命令只能够操作两个文件。它可以将那些具有特定标记域(通常是一个数字标签)的行合并起来,并且将结果输出到stdout。被加入的文件应该事先根据标记域进行排序以便于能够正确的匹配。
  • head / tail / more / less #比较简单,就先不多介绍了
  • expand / unexpand #expand命令将会把每个tab转化为一个空格。这个命令经常用在管道中。unexpand命令起到的效果与expand命令相反
  • fold
  • fmt
  • col
  • column
  • colrm
  • pr
  • tr
使用示例:
# cat my.md5
ff2d1296bf8fec4ed6d038cda1541d9f  aa/blockIP.sh
252700d91ddb9d1cc4d8fd7907300a80  aa/delegated-apnic-latest
f8595be2cb014549c5a2749e44b26153  aa/time_df.awk
81ee36494bd6885313e61992e0ee5d1e  aa/calc_subnet.sh
2befccb3ee74b9540e06e9367b410f62  aa/test.sh
06e4d738c36c74f8c7d6811858ae7123  aa/404_ipList.txt
#
# tac my.md5
06e4d738c36c74f8c7d6811858ae7123  aa/404_ipList.txt
2befccb3ee74b9540e06e9367b410f62  aa/test.sh
81ee36494bd6885313e61992e0ee5d1e  aa/calc_subnet.sh
f8595be2cb014549c5a2749e44b26153  aa/time_df.awk
252700d91ddb9d1cc4d8fd7907300a80  aa/delegated-apnic-latest
ff2d1296bf8fec4ed6d038cda1541d9f  aa/blockIP.sh
#
# rev my.md5
hs.PIkcolb/aa  f9d1451adc830d6de4cef8fb6921d2ff
tsetal-cinpa-detageled/aa  08a0037097df8d4cc1d9bdd19d007252
kwa.fd_emit/aa  35162b44e9472a5c945410bc2eb5958f
hs.tenbus_clac/aa  e1d5ee0e29916e3135886db49463ee18
hs.tset/aa  26f014b7639e60e0459b47ee3bccfeb2
txt.tsiLpi_404/aa  3217ea8581186d7c8f47c63c837d4e60
#
# nl my.md5
     1  ff2d1296bf8fec4ed6d038cda1541d9f  aa/blockIP.sh
     2  252700d91ddb9d1cc4d8fd7907300a80  aa/delegated-apnic-latest
     3  f8595be2cb014549c5a2749e44b26153  aa/time_df.awk
     4  81ee36494bd6885313e61992e0ee5d1e  aa/calc_subnet.sh
     5  2befccb3ee74b9540e06e9367b410f62  aa/test.sh
     6  06e4d738c36c74f8c7d6811858ae7123  aa/404_ipList.txt
#
# cat my.md5 | sort
06e4d738c36c74f8c7d6811858ae7123  aa/404_ipList.txt
252700d91ddb9d1cc4d8fd7907300a80  aa/delegated-apnic-latest
2befccb3ee74b9540e06e9367b410f62  aa/test.sh
81ee36494bd6885313e61992e0ee5d1e  aa/calc_subnet.sh
f8595be2cb014549c5a2749e44b26153  aa/time_df.awk
ff2d1296bf8fec4ed6d038cda1541d9f  aa/blockIP.sh
#
# cat my.md5 | sort -k 2
06e4d738c36c74f8c7d6811858ae7123  aa/404_ipList.txt
ff2d1296bf8fec4ed6d038cda1541d9f  aa/blockIP.sh
81ee36494bd6885313e61992e0ee5d1e  aa/calc_subnet.sh
252700d91ddb9d1cc4d8fd7907300a80  aa/delegated-apnic-latest
2befccb3ee74b9540e06e9367b410f62  aa/test.sh
f8595be2cb014549c5a2749e44b26153  aa/time_df.awk

 

未完待续……

 

参考链接:
,

《 “Linux下的一些文本处理命令的学习” 》 有 4 条评论

  1. 关于Unix哲学17条原则的新感悟
    http://www.techug.com/post/unix-17-philosophy-rule.html
    `
    1、模块化原则(Rule of Modularity)
    2、清晰原则(Rule of Clarity)
    3、和解原则(Rule of Composition)
    4、分离规则(Rule of Separation)
    5、简单规则(Rule of Simplicity)
    6、简约规则(Rule of Parsimony)
    7、透明度原则(Rule of Transparency)
    8、稳健性规则(Rule of Robustness)
    9、表示规则(Rule of Representation)
    10、最小惊喜规则(Rule of Least Surprise)
    11、沉默的规则(Rule of Silence)
    12、修理规则(Rule of Repair)
    13、经济规则(Rule of Economy)
    14、生成规则(Rule of Generation)
    15、优化规则(Rule of Optimization)
    16、规则的多样性(Rule of Diversity)
    17、可扩展性规则(Rule of Extensibility)
    `

  2. DuckDB 作为命令行工具(英文)
    https://duckdb.org/2024/06/20/cli-data-processing-using-duckdb-as-a-unix-tool.html
    `
    DuckDB 是一个内存数据库,本文介绍如何把它当作命令行工具,进行数据分析,取代 cut、sort、sed 等工具。

    DuckDB’s CLI client is portable to many platforms and architectures. It handles CSV files conveniently and offers users the same rich SQL syntax everywhere. These characteristics make DuckDB an ideal tool to complement traditional Unix tools for data processing in the command line.
    DuckDB 的 CLI 客户端可移植到多种平台和架构。它能方便地处理 CSV 文件,并在任何地方为用户提供同样丰富的 SQL 语法。这些特点使 DuckDB 成为补充传统 Unix 命令行数据处理工具的理想工具。

    * Table of Contents – 目录
    * The Unix Philosophy – Unix哲学
    * Portability and Usability – 便携性和可用性
    * Data Processing with Unix Tools and DuckDB – 使用 Unix 工具和 DuckDB 进行数据处理
    __* Datasets – 数据集
    __* Projecting Columns – 投影列
    __* Sorting Files – 文件分类
    __* Intersecting Columns – 相交立柱
    __* Pasting Rows Together – 将行粘贴在一起
    __* Filtering – 过滤
    __* Joining Files – 连接文件
    __* Replacing Strings – 字符串替换
    __* Reading JSON – 读取 JSON
    * Performance – 性能
    * Summary – 摘要
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注