繁体   English   中英

Linux脚本:如何使用匹配模式将文本拆分为不同的文件

[英]Linux script: how to split a text into different files with match pattern

例如:我有如下文本:

Jul 11 xxxx  xxxx start xxxxx
....
....
....
Jul 11 xxxx  xxxx stop xxxxx
Jul 11 xxxx  xxxx start xxxxx
....
....
....
Jul 11 xxxx  xxxx stop xxxxx
....

现在我想根据“开始”和“停止”将上述文本文件拆分为不同的文件,例如

/***text1.txt******/
Jul 11 xxxx  xxxx start xxxxx
....
....
....
Jul 11 xxxx  xxxx stop xxxxx

/***text2.txt******/
Jul 11 xxxx  xxxx start xxxxx
....
....
....
Jul 11 xxxx  xxxx stop xxxxx

我怎样才能做到这一点? 谢谢。

这可以使它:

$ awk '{if ($0 ~ /start/) a++} {print >> "file"a}' file

说明

  • {if ($0 ~ /start/) a++}查找包含单词start 如果是这样,则将变量a递增,默认情况下为0
  • {print >> "file"}' $0 (即整行)打印到同一目录中名为“ file”的文件中。
  • {print >> "file"a}将行打印到名为“ file” +变量a文件,该文件恰好是0、1、2 ...,因此将其打印到file1file2 ...

测试

$ cat a
Jul 11 xxxx  xxxx start xxxxx
....
....
....
Jul 11 xxxx  xxxx stop xxxxx
Jul 11 xxxx  xxxx start xxxxx
here begins 2nd file
....
....
....
Jul 11 xxxx  xxxx stop xxxxx
$ awk '{if ($0 ~ /start/) {a++}} {print >> "file"a}' a
$ cat file1
Jul 11 xxxx  xxxx start xxxxx
....
....
....
Jul 11 xxxx  xxxx stop xxxxx
$ cat file2
Jul 11 xxxx  xxxx start xxxxx
here begins 2nd file
....
....
....
Jul 11 xxxx  xxxx stop xxxxx

对于awk,“ if($ 0〜)”是隐式的。

awk 'BEGIN{a=0;b=0}  /start/{a++;b=1}    (b==1){print >> "file"a}   /stop/{b=0}' input_file.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM