0

例如:我有如下文本:

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

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

4

2 回答 2

3

这可以使它:

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

解释

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

测试

$ 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
于 2013-07-11T13:57:57.463 回答
0

使用 awk,'if ($0 ~ )' 是隐式的。

awk 'BEGIN{a=0;b=0}  /start/{a++;b=1}    (b==1){print >> "file"a}   /stop/{b=0}' input_file.txt
于 2014-08-18T16:42:13.207 回答