【发布时间】:2011-10-25 16:08:55
【问题描述】:
我有这样的输入:
Block 1:
line1
line2
line3
line4
Block 2:
line1
line2
Block 3:
line1
line2
line3
这是一个例子,是否有一种优雅的方式来打印 Block 2 及其行而不依赖于它们的名称?这就像“用空行分隔块并打印第二个块”。
【问题讨论】:
我有这样的输入:
Block 1:
line1
line2
line3
line4
Block 2:
line1
line2
Block 3:
line1
line2
line3
这是一个例子,是否有一种优雅的方式来打印 Block 2 及其行而不依赖于它们的名称?这就像“用空行分隔块并打印第二个块”。
【问题讨论】:
将记录分隔符设置为空字符串以在空行上分隔。至 打印第二个块:
$ awk -v RS= 'NR==2{ 打印 }'(请注意,这仅在不包含任何空格的行上分隔。 仅包含空格的行不被视为空行。)
【讨论】:
exit。
perl -00 -ne 'if ($.==2) {print; exit}'
试试这个:
awk '!$0{i++;next;}i==1' yourFile
考虑性能,也可以在处理完第二个块后添加退出:
awk '!$0{i++;next;}i==1;i>1{exit;}' yourFile
测试:
kent$ cat t
Block 1:
line1
line2
line3
line4
Block 2:
line1
line2
Block 3:
line1
line2
line3
kent$ awk '!$0{i++;next;}i==1' t
Block 2:
line1
line2
kent$ awk '!$0{i++;next;}i==1;i>1{exit;}' t
Block 2:
line1
line2
【讨论】: