Delete lines with a word and their above lines


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Delete lines with a word and their above lines
# 8  
Old 07-19-2013
Quote:
Originally Posted by Manish00712
Yoda,

I just tried your awk script but i get an error @ line 3 i.e v=$0. As i'm pretty new to awk i could not make out what could be the problem. And also one more doubt what i have is:

Ravinder wanted to delete the line before the ***no hit*** also but with the logic what i understood the below script will print the line A3 and then check for ***no hit*** condition rite..?


bash-3.00# awk '
> NF
> {
> v=$0
> getline
> if ($0!="***no hit***")
> print v RS $0 RS " "
> '
awk: syntax error near line 3
awk: bailing out near line 3
As Yoda said, you need to use nawk or /usr/xpg4/bin/awk instead of just awk if you are using a Solaris or SunOS system.

But, in addition to that, you need to copy one of Yoda's scripts exactly. Putting a newline between the NF and the { completely changes the behavior of his scripts. And, you dropped a } at the end of the script that is crucial.

Note also that if you don't specify a file to be read at the end of the script, it will wait for you to type in data instead of reading it from a file.
These 3 Users Gave Thanks to Don Cragun For This Post:
# 9  
Old 07-19-2013
Thanks yoda & Don. I used /usr/xpg4/bin/awk and it worked perfectly. Sorry for missing out few pieces in the earlier script. I did not know taking that { to next line will give a different output.

If possible could you please tell what happens if i put { that in next line.

Thanks
# 10  
Old 07-19-2013
Quote:
Originally Posted by Manish00712
Thanks yoda & Don. I used /usr/xpg4/bin/awk and it worked perfectly. Sorry for missing out few pieces in the earlier script. I did not know taking that { to next line will give a different output.

If possible could you please tell what happens if i put { that in next line.

Thanks
First, note that unless you redirect the output of the script to overwrite some file that you want to keep, making the change to the script and looking at what happens won't hurt anything. Don't be afraid to experiment!

Second, without trying it, let me guess at what the script would do:
Code:
awk '
        NF # If the number of fields on the current line is != 0; print the line
        { # Instead of only looking at lines that are not empty, look at every odd numbered line...
                # Set variable v = $0 ( current record )
                v = $0
                # Explicitly read next input record (an even numbered line)
                getline
                # If $0 ( current record ) != "***no hit***"
                if ( $0 != "***no hit***" )
                        # Print variable v value RS ( Record Separator - newline by default ) $0 RS blank space " "
                        print v RS $0 RS " "
        }
' file

So, just by reading the code (without trying to run it), I would guess that:
  1. Some lines from file will be printed twice.
  2. If an even numbered input line in file contains *** no hit ***, it and the line before it will be printed instead of being skipped.
I believe that is the difference that an extra newline would have on this simple script.

Some extra characters don't matter to awk (but make a script easier to read and maintain).
But, a single missing character or an extra character in the wrong spot can completely destroy the intended behavior of a program.
This User Gave Thanks to Don Cragun For This Post:
# 11  
Old 07-19-2013
Try also
Code:
awk '!/no hit/' RS= ORS="\n\n" file

This User Gave Thanks to RudiC For This Post:
# 12  
Old 07-19-2013
Wow! Smilie It took me some time to figure out what was going on in this tiny script ^^
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sed/awk to delete single lines that aren't touching other lines

Hello, I'm trying to figure out how to use sed or awk to delete single lines in a file. By single, I mean lines that are not touching any other lines (just one line with white space above and below). Example: one two three four five six seven eight I want it to look like: (6 Replies)
Discussion started by: slimjbe
6 Replies

2. Shell Programming and Scripting

search and replace, when found, delete multiple lines, add new set of lines?

hey guys, I tried searching but most 'search and replace' questions are related to one liners. Say I have a file to be replaced that has the following: $ cat testing.txt TESTING AAA BBB CCC DDD EEE FFF GGG HHH ENDTESTING This is the input file: (3 Replies)
Discussion started by: DeuceLee
3 Replies

3. UNIX for Advanced & Expert Users

In a huge file, Delete duplicate lines leaving unique lines

Hi All, I have a very huge file (4GB) which has duplicate lines. I want to delete duplicate lines leaving unique lines. Sort, uniq, awk '!x++' are not working as its running out of buffer space. I dont know if this works : I want to read each line of the File in a For Loop, and want to... (16 Replies)
Discussion started by: krishnix
16 Replies

4. Shell Programming and Scripting

Search the word to be deleted and delete lines above this word starting from P1 to P3

Hi, I have to search a word in a text file and then I have to delete lines above from the word searched . For eg suppose the file is like this: Records P1 10,23423432 ,77:1 ,234:2 P2 10,9089004 ,77:1 ,234:2 ,87:123 ,9898:2 P3 456456 P1 :123,456456546 P2 abc:324234 (2 Replies)
Discussion started by: vsachan
2 Replies

5. Shell Programming and Scripting

need to delete all lines from a group of files except the 1st 2 lines

Hello, I have a group of text files with many lines in each file. I need to delete all the lines in each and only leave 2 lines in each file. (3 Replies)
Discussion started by: script_op2a
3 Replies

6. Shell Programming and Scripting

How to delete all lines before a specific word?

Let's say we have a file containing: alllllsadfsdasdf qwdDDDaassss ccxxcxc#2222 dssSSSSddDDDD D1Sqn2NYOHgTI Hello Alex ssS@3 Ok, and let's say we want to delete all words from D1Sqn2NYOHgTI and back, this means to delete the words (and the lines of them) : alllllsadfsdasdf... (2 Replies)
Discussion started by: hakermania
2 Replies

7. UNIX for Dummies Questions & Answers

How get only required lines & delete the rest of the lines in file

Hiiii I have a file which contains huge data as a.dat: PDE 1990 1 9 18 51 28.90 24.7500 95.2800 118.0 6.1 0.0 BURMA event name: 010990D time shift: 7.3000 half duration: 5.0000 latitude: 24.4200 longitude: 94.9500 depth: 129.6000 Mrr: ... (7 Replies)
Discussion started by: reva
7 Replies

8. Shell Programming and Scripting

How to delete lines in a file that have duplicates or derive the lines that aper once

Input: a b b c d d I need: a c I know how to get this (the lines that have duplicates) : b d sort file | uniq -d But i need opossite of this. I have searched the forum and other places as well, but have found solution for everything except this variant of the problem. (3 Replies)
Discussion started by: necroman08
3 Replies

9. Shell Programming and Scripting

search a word and delete consecutive lines below it

Hi all coders, I need a help to process some data. I have this file, 3 09/21/08 03:32:07 started undef mino Oracle nmx004.wwdc.numonyx.co m Message Text : The Oracle session with the PID 1103 has a CPU time consuming of 999.00... (3 Replies)
Discussion started by: vikas027
3 Replies

10. Shell Programming and Scripting

delete lines containing a specific word in afile

Hi, Please suggest how to write a shell script which delets all the lines containing the word unix in the files supplied as argument in the shell. (4 Replies)
Discussion started by: sireesha9
4 Replies
Login or Register to Ask a Question