从这里在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]
运行脚本后,我得到一些文件与一行而不是块之间的所有文本
我希望有
中
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