1

假设您有一个文件,其中包含由 $ 分隔的文本(从 1 到 N)如何分割文件以使最终结果是 N 个文件?

text1 带换行符 $
text2 $etc... $
textN

我正在考虑使用 awk 或 sed 的东西,但是是否有任何可用的 unix 应用程序已经执行了这种任务?

4

5 回答 5

3

awk '开始{RS="$"; ORS=""} { textNumber++; 打印 $0 > "text"textNumber".out" }' 文件名

感谢比尔卡尔文的想法。

编辑:添加 ORS="" 以避免在每个文件的末尾打印换行符。

于 2008-11-14T18:11:25.317 回答
2

也许split -p 模式

唔。这可能不是你想要的。它不会分割一行,它只会在看到模式时启动一个新文件。而且它似乎只在 BSD 相关系统上受支持。

你可以使用类似的东西:

awk 'BEGIN {RS = "$"} { ... }'

编辑:您可能会在这里找到该{ ... }部分的一些灵感:

http://www.gnu.org/manual/gawk/html_node/Split-Program.html

编辑:感谢 dmckee 的评论,但csplit似乎也复制了出现模式的整行。

于 2008-11-14T15:53:02.240 回答
1

如果我没看错的话,可以使用UNIX cut命令。

cut -d $ -f 1- filename

我的语法可能略有偏差,但这应该告诉 cut 您正在使用 $ 分隔字段并从末尾返回字段 1。

您可能需要转义 $.

于 2008-11-14T16:32:28.230 回答
1
awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file
于 2010-01-06T07:31:32.293 回答
1

使用 split 命令,我们可以使用字符串进行拆分。

但是 csplit 命令也允许您根据正则表达式分割文件。

于 2010-01-06T11:46:16.947 回答