使用bash:如何根据输入文件行内容拆分文件?

时间:2018-08-23 10:31:40

标签: shell file split

我有一些大文本日志文件。内容就像:

Begin to work
Load library
Start
TEXTLOG
Checking
ok
TEXTLOG
Start process
Starting node
ok
TEXTLOG
Stop node
TEXTLOG

在此文件中,“ TEXTLOG”行用作分隔符,因此我希望使用“ TEXTLOG”作为EOF指示器将此文件拆分为几个较小的文件,因此我应该文件:

文件1:

Begin to work
Load library
Start

文件2:

Checking
ok

文件3:

Start process
Starting node
ok

文件4:

Stop node

如何使用Shell实现此目的? 谢谢。

3 个答案:

答案 0 :(得分:2)

使用GNU awk:

Upload up = tm.upload(bucketName, file.getName(), file);

UploadResult result = (UploadResult) ((UploadImpl) up).getMonitor().getFuture().get();
String uniqueIdFromServer = result.getETag();

awk -v RS="\nTEXTLOG\n" '{print > "file"++c}' file 是记录分隔符,可一次获取每个文件的内容。

答案 1 :(得分:2)

使用csplit:

csplit --suppress-matched file "/TEXTLOG/" "{*}"
  • --suppress-matched确保输出中不包含TEXTLOG分隔符
  • "{*}"告诉csplit不仅运行一次匹配模式,还运行整个文件

答案 2 :(得分:1)

尝试一下:

awk 'BEGIN{c=1}/^TEXTLOG/{c++;next} {print > "file"c}' file 
ls