菜单

处理文件和数据

相关源文件

目的与范围

本文档涵盖了在类Unix环境中用于处理、操作和转换文件及数据的命令行工具和技术。这些工具遵循Unix的哲学,即创建小型、专注的实用工具,这些工具可以以强大的方式组合使用。我们重点关注常见的文件操作、文本处理、结构化数据处理以及不同格式之间的转换。

有关帮助诊断性能问题的系统调试工具,请参阅系统调试。有关将这些工具组合成紧凑的单行命令的高级技术,请参阅单行命令和高级技术

来源:README.md215

文件和数据处理概述

文件和数据处理的命令行工具遵循一种模式:输入源通过各种转换进行处理,结果被定向到输出目的地。大多数工具设计为通过管道协同工作,从而实现复杂的数据处理流程。

来源:README.md215-310

定位和查找文件

命令行提供了几种定位文件的方法,每种方法都针对不同的用例进行了优化

  • find:根据名称、类型、大小或其他属性在目录层次结构中搜索文件
  • locate:使用预构建的数据库快速按名称查找文件(需要定期运行updatedb
  • 高级搜索工具:ackag(Silver Searcher)和rg(ripgrep),用于高效的代码和内容搜索

来源:README.md217-219

文本处理工具

Unix提供了丰富的工具集,用于转换、过滤和分析文本数据。这些工具可以在管道中组合起来执行复杂的操作。

核心文本处理实用程序

工具主要目的通用选项示例
sort对文本行进行排序-n(数字)、-h(人类可读)、-r(反向)、-k(键)sort -k2,2 file.txt
uniq报告或过滤重复的行-c(计数)、-d(仅重复项)、-u(仅唯一项)sort file.txt | uniq -c
cut删除每行的部分-d(分隔符)、-f(字段)cut -d, -f1,3 file.csv
paste合并文件的行-d(分隔符)paste file1 file2
join在共同字段上连接两个文件的行-t(字段分隔符)、-1(file1 字段)、-2(file2 字段)join -t, -1 2 -2 1 file1 file2
wc计算行数、单词数、字符数-l(行)、-w(单词)、-c(字节)、-m(字符)wc -l file.txt
tee从标准输入读取并写入标准输出和文件-a(追加)cmd | tee file.txt

来源:README.md235-249

高级文本处理

用于更复杂的数据处理任务

  • sedawk:强大的流编辑器和模式扫描工具
  • perl:用于复杂文本替换和转换的单行命令
  • datamash:对表格数据进行统计运算

处理文本时的关键注意事项

  • 区域设置会影响排序顺序和性能
  • 使用LC_ALL=C应用基于字节的排序以获得更好的性能
  • 使用TZ=Pacific/Fiji date为命令设置特定的环境变量

来源:README.md245-251

文件转换与格式化

格式转换工具

命令行提供了用于在不同数据格式之间进行转换的专用工具

具体的转换工具包括

  • pandoc:通用文档转换器(Markdown、HTML、docx 等)
  • lynx -dump -stdin:将 HTML 转换为纯文本
  • xmlstarlet:处理 XML 文件
  • jq:JSON 处理(配合 jidjiq 以实现交互式使用)
  • shyaml:YAML 处理
  • csvkit:处理 CSV 文件的工具(in2csvcsvcutcsvjoin 等)
  • iconvuconv:字符编码转换

来源:README.md221-232 README.md287-294

文件操作与修改

文件重命名与修改

用于更改文件名和内容

  • perl -pi.bak -e 's/old-string/new-string/g' files:原地字符串替换
  • repren:多文件搜索和替换,并可更改文件名
  • rename:批量重命名(因 Linux 发行版而异)

文件复制与同步

用于高效地复制和同步文件

  • rsync:快速文件复制和同步,本地或远程
    • 可用于高效删除:mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
  • 进度监控工具:pvpycppmonitorprogressrsync --progress

文件分割与合并

用于分割或合并文件

  • split:按大小分割文件
  • csplit:根据上下文(模式)分割文件
  • shuf:随机打乱文件中的行或选择随机条目

来源:README.md251-274

二进制文件操作

处理二进制数据的工具

  • hdhexdumpxxd:创建二进制文件的十六进制转储
  • bvihexeditbiew:二进制编辑器
  • strings:从二进制文件中提取文本内容
  • xdelta3:二进制差异工具(增量压缩)

来源:README.md281-286

处理压缩文件

用于处理压缩数据

  • zlesszmorezcatzgrep:直接处理压缩文件,无需解压

来源:README.md300

文件属性与权限管理

用于管理文件属性和权限

  • chattr:设置特殊文件属性(例如,不可修改标志,使用sudo chattr +i /critical/file
  • getfaclsetfacl:保存和恢复文件权限

来源:README.md302-308

常见数据处理模式

文本文件的集合操作

使用sortuniq进行文本文件的集合操作

sort a b | uniq > c   # c is a union b
sort a b | uniq -d > c   # c is a intersect b
sort a b b | uniq -u > c   # c is set difference a - b

文本字段处理

针对特定列或字段的操作

awk '{ x += $3 } END { print x }' myfile  # Sum third column

JSON比较与格式化

用于比较带有规范化格式的 JSON 文件

diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R

来源:README.md360-370

数据处理工具生态系统

文件和数据处理工具构成了一个生态系统,其中每个工具都专注于一项特定任务,但都可以与其他工具结合使用,创建强大的数据管道。

来源:README.md215-310

区域设置和编码注意事项

在处理文件和数据时,请注意区域设置如何影响操作

  • 区域设置会影响排序顺序、性能和字符处理
  • 使用LC_ALL=C来实现传统的基于字节的排序顺序和更快的处理速度
  • 对于字符编码转换,请使用iconvuconv(具有增强的 Unicode 支持)
  • 使用TZ=Pacific/Fiji date等环境变量前缀来处理特定时区的操作

来源: README.md245-248 README.md287-294

结论

Unix 命令行提供了一套丰富的工具来处理文件和数据。通过管道和重定向组合这些工具,您可以创建强大的数据处理流水线,以满足特定需求。理解这些工具及其交互作用,可以让您在无需复杂编程的情况下,高效地操纵、转换和分析数据。

来源:README.md215-310