Delete a block of text delimited by blank lines when pattern is found


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Delete a block of text delimited by blank lines when pattern is found
# 8  
Old 12-15-2007
Or even:

Code:
awk '!/pattern/' ORS="\n\n" RS= file

You need ORS to restore the blank lines between the blocks.

But it's quite possible to get (not GNU Awk) the "line too long" error ...
# 9  
Old 12-15-2007
Quote:
Originally Posted by gleu
I don't quite understand the above bit of code about the Set-Aside buffer (but I'll look it up later ...unless you or someone wants to explain for the benefit of others).

Sure,
check Bruce Barnett's Sed - An Introduction and Tutorial - Flow Control
# 10  
Old 12-15-2007
Hi.

A perl script doesn't usually need to worry about line length, and telling perl about the definition of a block (I call it a visual paragraph) is simple:
Code:
#!/usr/bin/perl

# @(#) p1       Demonstrate visual paragraph skip if pattern found.

use warnings;
use strict;

my($debug);
$debug = 0;
$debug = 1;

my($lines) = 0;
my($pattern) = shift || die "usage: $0 pattern [files]\n";

$/ = "";        # block separator: any sequence of two or more newlines.

while ( <> ) {
        $lines++;
        print if !/$pattern/xms;        # always use xms on matches
}

print STDERR " ( Blocks read: $lines )\n";

exit(0);

Using the block test file of radoulov and ghostdog74 as "data1" produces:
Code:
% ./p1 pattern data1
block2
block2
block2
block2

 ( Blocks read: 3 )

Best wishes ... cheers, drl
# 11  
Old 12-15-2007
Quote:
Originally Posted by radoulov
Sure,
check Bruce Barnett's Sed - An Introduction and Tutorial - Flow Control
Thanks.
I've also been reading the relevant bits in Sed & Awk by Dale Dougherty and Arnold Robbins (O'Reilly). I understand the code now.
# 12  
Old 12-15-2007
Quote:
Originally Posted by ghostdog74
Code:
...
# awk 'BEGIN{RS=""}/pattern/{next}1' file
block2
block2
block2
block2

The awk code looks straightforward but I could not get that code to work
Code:
gawk 'BEGIN {RS=""}/pattern/{next}' myfile

(I took out the 1 after next because I thought it was a typo... but in any case with or without the 1, the code gives me no output at all :-(

Last edited by gleu; 12-15-2007 at 06:19 PM.. Reason: missing closing apostrophe
# 13  
Old 12-15-2007
Quote:
Originally Posted by radoulov
Or even:

Code:
awk '!/pattern/' ORS="\n\n" RS= file

You need ORS to restore the blank lines between the blocks.

But it's quite possible to get (not GNU Awk) the "line too long" error ...

I can't get your version (nor ghostdog74) to output anything.
gawk '!/pattern/' ORS="\n\n" RS= myfile
Strange
... but at least the sed version works a treat!
# 14  
Old 12-15-2007
Quote:
Originally Posted by gleu
I can't get your version (nor ghostdog74) to output anything.
gawk '!/pattern/' ORS="\n\n" RS= myfile
Post a sample from your (real) file.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Delete multiple lines between blank lines containing two patterns

Hi all, I'm looking for a way (sed or awk) to delete multiple lines between blank lines containing two patterns ex: user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 16... (3 Replies)
Discussion started by: ce9888
3 Replies

2. Shell Programming and Scripting

Tried many options but unable to delete blank lines from text file

Hi, I tried the following options but was unable to delete blank lines from file Input file = temp.hash.txt temp.hash.txt content 90 0 89.56 0 0 57575.4544 56.89 (9 Replies)
Discussion started by: uuuunnnn
9 Replies

3. UNIX for Dummies Questions & Answers

How to delete blank line/s before and after a search pattern?

Hi, Test file x.txt below. This file is generated by a program that I unfortunately do not have control on how it gets presented/generated. create PACKAGE "XXX_INTERFACE_DEFECT_RPT_TEST" is TYPE refCursor IS REF CURSOR; Function queryRecords ( p_status varchar2, ... ... ... )... (4 Replies)
Discussion started by: newbie_01
4 Replies

4. UNIX for Advanced & Expert Users

Delete blank spaces and blank lines in a file

Hi Gurus, Somebody can say me how to delete blank spaces and blank lines in a file unix, please. Thank you for advanced. (10 Replies)
Discussion started by: systemoper
10 Replies

5. Shell Programming and Scripting

Remove blank columns from a tab delimited text file

Hello, I have some tab delimited files that may contain blank columns. I would like to delete the blank columns if they exist. There is no clear pattern for when a blank occurs. I was thinking of using sed to replace instances of double tab with blank, sed 's/\t\t//g' All of the examples... (2 Replies)
Discussion started by: LMHmedchem
2 Replies

6. Shell Programming and Scripting

If first pattern is found, look for second pattern. If second pattern not found, delete line

I had a spot of trouble coming up with a title, hopefully you'll understand once you read my problem... :) I have the output of an ldapsearch that looks like this: dn: cn=sam,ou=company,o=com uidNumber: 7174 gidNumber: 49563 homeDirectory: /home/sam loginshell: /bin/bash uid: sam... (2 Replies)
Discussion started by: samgoober
2 Replies

7. Shell Programming and Scripting

Sed delete blank lines upto first pattern match

Hi Im trying to do the following in sed. I want to delete any blank line at the start of a file until it matches a pattern and then stops. for example: Input output: I have got it to work within a range of two patterns with the following: sed '/1/,/pattern/{/^]*$/d}' The... (2 Replies)
Discussion started by: duonut
2 Replies

8. Shell Programming and Scripting

Delete blank lines, if blank lines are more than one using shell

Hi, Consider a file named "testfile" The contents of file are as below first line added for test second line added for test third line added for test fourth line added for test fifth line added for test (5 Replies)
Discussion started by: anil8103
5 Replies

9. Shell Programming and Scripting

Print lines after the search string until blank line is found

All I want is to look for the pattern in the file...If I found it at # places... I want print lines after those pattern(line) until I find a blank line. Log EXAMPLE : MT:Exception caught The following Numbers were affected: 1234 2345 2346 Error java.lang.InternalError:... (3 Replies)
Discussion started by: prash184u
3 Replies

10. Shell Programming and Scripting

delete block of lines when pattern does not match

I have this input file that I need to remove lines which represents more than 30 days of processing. Input file: On 11/17/2009 at 12:30:00, Program started processing...argc=7 Total number of bytes in file being processed is 390 Message buffer of length=390 was allocated successfully... (1 Reply)
Discussion started by: udelalv
1 Replies
Login or Register to Ask a Question