我有一些大文本日志文件。内容就像:
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实现此目的? 谢谢。
答案 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