Unix shell脚本 - 根据模式从文件中删除多行

时间:2016-02-19 08:21:57

标签: perl shell unix scripting

该文件的格式为:

header - like 0001datetime|number of records
0010 some data
0012 Roll number (eg)
0020 some data
.
.
.
0070 some data
0010 some data
0012 Roll number (eg)
0020 some data
.
.
.
0070 some data
trailer - like 0099datetime|numberof records

要求 - 将提供滚动编号列表,并且需要删除这些编号的记录(0010-0070)。 0010 0070 之间可能有任意数量的字段,但广告订单号始终为0012

每条记录始终以0010开头,以0070结束。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

除了标题和预告行之外,您的文件由块组成。每个块以0010行开始,以0070行结束。

一个简单的算法是始终将一个整块读入内存,并且只有当0012行(表示卷号)不是要删除的卷号之一时才写出来。

您正在通过" shell"标记此问题。然而,尽管使用just,即bash或zsh的解决方案在技术上是可行的,但我认为使用更灵活的语言更容易 - Ruby,Perl,Python等。也许你可以用您选择的语言?

如果您还不熟悉其中一种语言,我的个人推荐是Ruby,因为我发现它很快学会了;但是所有这些都同样适合这个问题。