csplitを使用して正規表現に基づいてファイルを複数のファイルに分割する

csplitを使用して正規表現に基づいてファイルを複数のファイルに分割する

次の例の内容を含むテキストファイルがあります。このファイルを複数のファイルに分割したいと思います。

[TXT]   /path/to/[TXT]
[BAT]   /path/to/[BAT]
[TXT]   /path/to/blah/[TXT]
[BAT]   /path/to/blah/[BAT]

csplitだから私は私が達成したいものを少なくとも部分的に達成するために使用できることを発見しました。

csplit -f 'paths-' -b '%04d.txt' 'path/to/filelist.txt' '/^\[(.*)]\t/' '{*}'

しかし、これはpaths-0000.txt

paths-txt.txtのようなものがもっと増えてほしいですpaths-bat.txt

とにかく正規表現をプレフィックス一致と一致させることはできますか?

-f 'paths-$1.txt'私はのようなものを試しました-f 'paths-\1.txt'

しかし、これらのどれも私が望むように行われませんでした。

答え1

csplitの使用は、仕事に適したツールではありません。

私が欲しいものを達成するためにawkを使用します。

awk -F"\t" '{print > $1".txt"}' /path/to/filelist.txt

制限したい場合は、分割後にファイルの特定の部分のみを保持できますが、すべてが必要または必要です。

awk -F"\t" '{print $2 > $1".txt"}' /path/to/filelist.txt

関連情報