在bash中将文件分割成单独的文件

  • 本文关键字:文件 单独 分割 bash bash
  • 更新时间 :
  • 英文 :


从这里在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

最新更新