在特定范围之间打印 - sed或awk

时间:2017-06-08 02:59:18

标签: bash awk sed

我们如何使用sed或awk实现这一目标?

我现在已将文字包含在代码块中以明确

应打印代码块部分 - 是要求。

逻辑1:

文本'abc'将是我们的关键字,它将是唯一的,并且只会出现在代码块部分中

所以我们必须搜索'abc'并从该行开始直到最后一次'abc'出现所有行都应该打印

逻辑2:

根据页码,即再次在第1页和第n页之间选择文字 注意:'Page 1'和'Page 1 - Page n'可以多次出现。

整个文本是4GB文件的一部分,需要针对类似事件进行解析。

道歉,不清楚。

文件开头:

Xyz Page:1

B'/ P>

C

d

ë

QWE页面:1

ë

[R

ý

asdabc       Page: 1

t

y

u

I

o

ghjabc       Page: 2

e

d

c

b

bnmabc       Page: 3

uia

asd

ads

thm Page:1

作为

DAS

文件结尾

2 个答案:

答案 0 :(得分:0)

我真的不知道你想要打印什么,但你应该可以使用sed

sed -n '/start pattern/,/end pattern/p' <file>

答案 1 :(得分:0)

您可以使用awk

来实现
awk 'BEGIN{a=0} /.*Page/{if(index($0,"abc")!=0){a=1} else{a=0}} a==1{print}' <Your_File>

输出:

asdabc       Page: 1

t

y

u

I

o

ghjabc       Page: 2

e

d

c

b

bnmabc       Page: 3

uia

asd

ads

这是我在这里做的事,

  1. 设置标记'a'以确定是否打印
  2. 在该行中找到字符串“Page”,然后检查其中是否有“abc”
  3. 开始打印行
  4. 打印该行直到下一个“Page”显示但其中没有“abc”