ディレクトリ内の複数のテキストファイルを、指定された文字数よりも小さいテキストファイルに分割したいと思います。たとえば、ディレクトリ内のすべてのファイルをそれぞれ100文字の小さなテキストファイルに分割したいとします。私が理解したように、Linuxの分割コマンドは文字数ではなく行数だけで動作するため、これが機能するかどうかはわかりません。
編集:テキストファイルを単語数に分割する方法も知りたいです。
答え1
ファイルがASCIIテキストの場合に使用できますsplit -b100
。これは100バイト、常に100文字のASCII文字を意味します。
答え2
正確に要求されたものではありませんが、調整することができます。
.txt
これにより、現在のディレクトリでサフィックスが付いたすべてのファイルが処理されます。各ファイルについて(例Cairo.txt
:):
- すべてのスペースを改行文字で置き換えることで、1行に1語の単純な
tr
リストが生成されます。 fmt
指定された長さまでの整数の単語を1行に囲むために使用されます。split
この行を一連のCairo.seq.0000
ファイル名にするために使用されます。
テスト可能性のために幅60と30行を使用し、入力内容は次のように生成されたプレーンテキストのマニュアルページ3つでした。
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に設定することをお勧めします。
分割コマンドの各出力ファイルの行数は「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 $