1

我有一个包含随机行和关键词END的文件:

line 1
line 2
...
line 23
END
line 25
....
line 40
END

我想根据关键字 END 将其拆分为多个文件,并将其放在每个文件中:文件 1

line 1
line 2
...
line 23
END

文件 2

line 25
.....
line 40
END

我试过了:

csplit -k file_name '/END/' '{*}' but i do not get the correct output.
4

2 回答 2

3

向正则表达式添加偏移量 1 以将匹配项包含END在当前文件中。我还添加^$锚定了正则表达式。

csplit -k file -f file --elide-empty-files '/^END$/1' '{*}'
  • -f file设置输出文件名前缀
  • --elide-empty-files这是一个 GNU 扩展并且不输出空文件(在这种情况下是一个空文件file02

输出:

$ head file0*
==> file00 <==
line 1
line 2
...
line 23
END

==> file01 <==
line 25
....
line 40
END
于 2020-06-22T14:59:23.840 回答
2

awk

$ awk '{f= FILENAME"."(c+1); print > f} /^END$/{close(f); c++}' file

$ head file.*

==> file.1 <==
line 1
line 2
...
line 23
END

==> file.2 <==
line 25
....
line 40
END

边缘情况行为: 如果输入文件为空(无行),则不会生成输出。如果文件有空行,则将文件的精确副本生成为分区(与没有END标记或末尾只有一个相同)。

于 2020-06-22T16:56:14.113 回答