将文件中的部分拆分为 bash 中的单独文件
Split portions from file to separate file in bash
从这里开始,通过一些代码更改,我设法实现了目标。
现在,我想将文本保存在单独的文件中。
我试过了:
awk '/[code]:/{flag=1} flag; /[/code]:/{flag=0}{x="/home/user/split/File"++i".txt";}{print > x;}' /home/user/bigfile.nfo
但我得到很多只有一行或没有一行的文件(0 字节的空文件)
如何将[code]
和[/code]
之间的所有内容写到单独的文件中?在这些标签之间找到多少文本,就应该创建多少文件,这是我的期望
我的代码哪里出错了?
大文件内容
blavbl
[code]
sdasdasd
asdasd
...
[/code]
line X
line Y
etc
...
[code]
...
test
test
[/code]
blabla
[code]
Single line
[/code]
在 运行 脚本之后,我得到一些只有一行的文件,而不是块之间的所有文本
我希望有
File1.txt
sdasdasd
asdasd
...
File2.txt
...
test
test
File3.txt
Single line
等等
OP 当前代码的一些问题:
- 字符
[
、]
和/
在awk
正则表达式模式中具有特殊含义;一种解决方案是在将它们作为文字字符查找时转义所述字符
- OP 应该确保一旦没有更多的输出到所述文件就关闭文件的描述符(这应该使
awk
免于(可能)由于 'out of file descriptor' 错误而崩溃)
- OP 的当前模式包括尾随
:
,但 OP 的示例输入中不存在此类字符(即,[code]:
将不匹配 [code]
)
一个awk
想法:
awk '
/^\[code\]/ { outfile="/home/user/split/File" ++i ".txt"; next }
/^\[\/code\]/ { close(outfile); outfile=""; next }
outfile { print > outfile }
' bigfile.nfo
注意: 技术上 ]
(没有转义符 \
)也应该有效
这会生成:
$ head File*.txt
==> File1.txt <==
sdasdasd
asdasd
...
==> File2.txt <==
...
test
test
==> File3.txt <==
Single line
从这里
现在,我想将文本保存在单独的文件中。
我试过了:
awk '/[code]:/{flag=1} flag; /[/code]:/{flag=0}{x="/home/user/split/File"++i".txt";}{print > x;}' /home/user/bigfile.nfo
但我得到很多只有一行或没有一行的文件(0 字节的空文件)
如何将[code]
和[/code]
之间的所有内容写到单独的文件中?在这些标签之间找到多少文本,就应该创建多少文件,这是我的期望
我的代码哪里出错了?
大文件内容
blavbl
[code]
sdasdasd
asdasd
...
[/code]
line X
line Y
etc
...
[code]
...
test
test
[/code]
blabla
[code]
Single line
[/code]
在 运行 脚本之后,我得到一些只有一行的文件,而不是块之间的所有文本
我希望有
File1.txt
sdasdasd
asdasd
...
File2.txt
...
test
test
File3.txt
Single line
等等
OP 当前代码的一些问题:
- 字符
[
、]
和/
在awk
正则表达式模式中具有特殊含义;一种解决方案是在将它们作为文字字符查找时转义所述字符 - OP 应该确保一旦没有更多的输出到所述文件就关闭文件的描述符(这应该使
awk
免于(可能)由于 'out of file descriptor' 错误而崩溃) - OP 的当前模式包括尾随
:
,但 OP 的示例输入中不存在此类字符(即,[code]:
将不匹配[code]
)
一个awk
想法:
awk '
/^\[code\]/ { outfile="/home/user/split/File" ++i ".txt"; next }
/^\[\/code\]/ { close(outfile); outfile=""; next }
outfile { print > outfile }
' bigfile.nfo
注意: 技术上 ]
(没有转义符 \
)也应该有效
这会生成:
$ head File*.txt
==> File1.txt <==
sdasdasd
asdasd
...
==> File2.txt <==
...
test
test
==> File3.txt <==
Single line