如何按目录中的字符数拆分文本文件

如何按目录中的字符数拆分文本文件

我想按给定的字符数将目录中的多个文本文件划分为许多较小的文本文件。例如,我希望目录中的每个文件都分为每个 100 个字符的较小文本文件。据我了解,linux 中的 split 命令仅按行数而不是字符数起作用,所以我不确定这是否有效。

编辑:我也有兴趣了解如何按字数划分文本文件。

答案1

如果文件是 ASCII 文本,则可以使用split -b100.这意味着 100 个字节,始终是 100 个 ASCII 字符。

答案2

不完全符合您的要求,但可能会进行调整。

.txt这将处理当前目录中带有后缀的所有文件。对于每个文件(例如Cairo.txt):

  1. 它用tr换行符替换所有空格,得到一个简单的每行一个单词列表。
  2. 它用于fmt将整数个单词打包成行,直到指定的长度。
  3. 它用于split将这些行制作成一系列名为Cairo.seq.0000和 up 的文件。

为了可测试性,我使用了宽度 60 和第 30 行,我的输入是由此生成的三个纯文本手册页:

for cmd in tr fmt split; do man $cmd | col -b > $cmd.txt; done

这是脚本:

#! /bin/bash

    for fn in ./*.txt; do
        Base="${fn%.txt}"
        tr -s '[:space:]' '\n' < "${fn}" |
            fmt -60 |
            split -a 4 -d -l 30 - "./${Base}.seq."
    done

线宽是fmt命令中的“60”。所以你可能想把这个数字设为 100。

每个输出文件的行数是 split 命令中的“30”。您似乎希望每个文件 1 行。但是,您将获得很多这样的小文件。 100 字节的文件仍占用 4096 字节的块。

可以看到字数没有变化,但是空白减少了,行也少了。

paul $  wc *
   29   214  1561 fmt.seq.0000
   61   214  1832 fmt.txt
   30   260  1665 split.seq.0000
   15   101   780 split.seq.0001
   94   361  2892 split.txt
   30   263  1724 tr.seq.0000
   18   126   929 tr.seq.0001
  124   389  3282 tr.txt
  410  1955 14821 total
paul $ 

相关内容