文件及数据处理

2018-02-24 16:02 更新
  • 在当前路径下通过文件名定位一个文件,find . -iname '*something*'(或类似的)。在所有路径下通过文件名查找文件,使用 locate something (但请记住 updatedb 可能没有对最近新建的文件建立索引)。

  • 使用 ag 在源代码或数据文件里检索(比 grep -r 更好)。

  • 将HTML转为文本:lynx -dump -stdin

  • Markdown,HTML,以及所有文档格式之间的转换,试试 pandoc

  • 如果你不得不处理 XML,xmlstarlet 宝刀未老。

  • 使用 jq 处理 JSON。

  • Excel 或 CSV 文件的处理,csvkit 提供了 in2csvcsvcutcsvjoincsvgrep 等工具。

  • 关于 Amazon S3,s3cmd 很方便而 s4cmd 更快。Amazon 官方的 aws 是其他 AWS 相关工作的基础。

  • 了解如何使用 sort 和 uniq,包括 uniq 的 -u 参数和 -d 参数,详见后文一行代码节。另外可以了解一下 comm

  • 了解如何使用 cutpaste 和 join 来更改文件。很多人都会使用 cut,但几乎都不会使用 join

  • 了解如何运用 wc 去计算新行数(-l),字符数(-m),单词数(-w)以及字节数(-c)。

  • 了解如何使用 tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt

  • 了解语言环境对许多命令行工具的微妙影响,包括排序的顺序和性能。大多数 Linux 的安装过程会将 LANG 或其他有关的变量设置为符合本地的设置。意识到当你改变语言环境时,排序的结果可能会改变。明白国际化可能会时 sort 或其他命令运行效率下降许多倍。某些情况下(例如集合运算)你可以放心的使用 export LC_ALL=C 来忽略掉国际化并使用基于字节的顺序。

  • 了解 awk 和 sed 关于数据的简单处理的用法。例如,将文本文件中第三列的所有数字求和:awk '{ x += $3 } END { print x }'. 这可能比同等作用的 Python 代码块三倍且代码量少三倍。

  • 替换一个或多个文件中出现的字符串:
      perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
  • 依据某种模式批量重命名多个文件,使用 rename。对于复杂的重命名规则,repren 或许有帮助。
      # Recover backup files foo.bak -> foo:
      rename 's/\.bak$//' *.bak
      # Full rename of filenames,directories,and contents foo -> bar:
      repren --full --preserve-case --from foo --to bar .
  • 使用 shuf 从一个文件中随机选取行。

  • 了解 sort 的参数。处理数字方面,使用 -n 或者 -h 来处理可读性数字(例如 du -h 的输出)。明白键的工作原理(-t 和 -k)。例如,注意到你需要 -k1,1 来仅按第一个域来排序,而 -k1 意味着按整行排序。稳定排序(sort -s)在某些情况下很有用。例如,以第二个域为主关键字,第一个域为次关键字进行排序,你可以使用sort -k1,1 | sort -s -k2,2

  • 如果你想在 Bash 命令行中写 tab 制表符,按下 ctrl-v [Tab] 或键入 $'\t' (后者可能更好,因为你可以复制粘贴它)。

  • 标准的源代码对比及合并工具是 diff 和 patch。使用 diffstat 查看变更总览数据。注意到 diff -r 对整个文件夹有效。使用 diff -r tree1 tree2 | diffstat 查看变更总览数据。

  • 对于二进制文件,使用 hd 使其以十六进制显示以及使用 bvi 来编辑二进制。

  • 同样对于二进制文件,使用 strings(包括 grep 等等)允许你查找一些文本。

  • 二进制文件对比(Delta 压缩),使用 xdelta3

  • 使用 iconv 更改文本编码。而更高级的用法,可以使用 uconv,它支持一些高级的 Unicode 功能。例如,这条命令将所有元音字母转为小写并移除了:
      uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
  • 拆分文件,查看 split(按大小拆分)和 csplit(按模式拆分)。

  • 使用 zlesszmorezcat 和 zgrep对压缩过的文件进行操作。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号