Visit Our UNIX and Linux User Community


awk match pattern and print lines till next blank line


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers awk match pattern and print lines till next blank line
# 1  
Old 04-21-2020
awk match pattern and print lines till next blank line

Dear Experts,




Here is my input files which has various sections of data.


Code:
 SURVEY RESULT

NUMADDR             NUB       NUBA
4-9XXXXXXXXXXX      1244359    1099510
4-9YYYYYYYYYYY           692        586
4-2XXXXXXXXXXX           223        147
4-8YYYYYYYYYYY            1          1

SUMADDR             NUB       NUBA
4-9XXXXXXXXXXX      1244359    1099510
4-9YYYYYYYYYYY           692        586
4-2XXXXXXXXXXX           223        147
4-8YYYYYYYYYYY            1          1


TOTNSUB                NUB       NUBA
4-9XXXXXXXXXXX      128888    1099510
4-9YYYYYYYYYYY           692        586
4-2XXXXXXXXXXX           223        147
4-8YYYYYYYYYYY            1          1

TOTNSUBA             NUB       NUBA
4-9XXXXXXXXXXX      129999    1099510
4-9YYYYYYYYYYY           692        586
4-2XXXXXXXXXXX           223        147
4-8YYYYYYYYYYY            1          1


The below awk command to get data matching first column NUMADDR till number of lines specified in command.
I need only change here is instead of mentioning static number of lines for (y=0;y>4;y++) need all lines till next blank line.


Code:
 awk '{a[++i]=$0;}END{for (j=1;j<NR;j++) {if (a[j]~"NUMADDR") {for (y=0;y>5;y++) print a[j+y]}}}' file


Output should be as below


Code:
NUMADDR             NUB       NUBA
4-9XXXXXXXXXXX      1244359    1099510
4-9YYYYYYYYYYY           692        586
4-2XXXXXXXXXXX           223        147
4-8YYYYYYYYYYY            1          1

# 2  
Old 04-21-2020
Dear experts,




Here below i tried and its worked


Code:
$ awk '$0~s{p=1;next}/^$/{p=0}p' s="NUMADDR" mgsvp_test.txt
4-9XXXXXXXXXXX      1244359    1099510
4-9YYYYYYYYYYY           692        586
4-2XXXXXXXXXXX           223        147
4-8YYYYYYYYYYY            1          1

eshaqur@SA-00001256 ~
$ awk '$0~s{p=1;next}/^$/{p=0}p' s="SUMADDR" mgsvp_test.txt
4-9XXXXXXXXXXX      1244359    1099510
4-9YYYYYYYYYYY           692        586
4-2XXXXXXXXXXX           223        147
4-8YYYYYYYYYYY            1          1

# 3  
Old 04-21-2020
awk can do this during reading the input file - no need to store everything and process in the END section.
Code:
awk '$1~search {p=1} NF==0 {p=0}; p' search="NUMADDR" file

The p variable controls when to be printed. The bare p seclector without a following { action } defaults to { print }.

EDIT: Just seeing your previous post. It is quite similar to my solution.
This User Gave Thanks to MadeInGermany For This Post:
# 4  
Old 04-21-2020
G8 thanks a lot


its working and good enough


Code:
awk '$1~search {p=1} NF==0 {p=0}; p' search="NUMADDR" mgsvp_test.txt
NUMADDR             NSUB       NSUBA
4-9XXXXXXXXXXX      1244359    1099510
4-9YYYYYYYYYYY           692        586
4-2XXXXXXXXXXX           223        147
4-8YYYYYYYYYYY            1          1

# 5  
Old 04-21-2020
How about
Code:
awk '/SUMADDR/,/^$/ ' file

or
Code:
sed -n '/SUMADDR/,/^$/p ' file

?

Previous Thread | Next Thread
Test Your Knowledge in Computers #883
Difficulty: Easy
A computer security vulnerability is a weakness in design, implementation, operation or internal control.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to combine lines from line with pattern match to a line that ends in a pattern

I am trying to combine lines with these conditions: 1. First line starts with text of "libname VALUE db2 datasrc" where VALUE can be any text. 2. If condition1 is met then continue to combine lines through a line that ends with a semicolon. 3. Ignore case when matching patterns and remove any... (5 Replies)
Discussion started by: Wes Kem
5 Replies

2. Shell Programming and Scripting

Match Pattern and print pattern and multiple lines into one line

Hello Experts , require help . See below output: File inputs ------------------------------------------ Server Host = mike id rl images allocated last updated density vimages expiration last read <------- STATUS ------->... (4 Replies)
Discussion started by: tigerhills
4 Replies

3. Shell Programming and Scripting

UNIX help to print 50 lines after every 3rd occurrence pattern till end of file

I need help with extract/print lines till stop pattern. This needs to happen after every 3rd occurrence of start pattern and continue till end of file. Consider below is an example of the log file. my start pattern will be every 3rd occurrence of ERROR_FILE_NOT_FOUND and stop pattern will be... (5 Replies)
Discussion started by: NSS
5 Replies

4. Shell Programming and Scripting

Match pattern and print the line number of occurence using awk

Hi, I have a simple problem but i guess stupid enough to figure it out. i have thousands rows of data. and i need to find match patterns of two columns and print the number of rows. for example: inputfile abd abp 123 abc abc 325 ndc ndc 451 mjk lkj... (3 Replies)
Discussion started by: redse171
3 Replies

5. Shell Programming and Scripting

awk print pattern match line and following lines

Data: Pattern Data Data Data Data Data Data Data Data Data ... With awk, how do I print the pattern matching line, then the subsequent lines following the pattern matching line. Varying number of lines following the pattern matching line. (9 Replies)
Discussion started by: dmesserly
9 Replies

6. Shell Programming and Scripting

Displaying text till pattern match found in a line

Hi All, From the below line if we want to display all the text till found pattern dot/. I was trying with the below code but couldn't able to print text before the pattern. it display texts which is found after pattern. awk '/assed/{print;getline;print}' file_name | sed 's/^*. *//' input... (4 Replies)
Discussion started by: Optimus81
4 Replies

7. Shell Programming and Scripting

Grep the word from pattern line and update in subsequent lines till next pattern line reached

Hi, I have got the below requirement. please suggest. I have a file like, Processing Item is: /data/ing/cfg2/abc.txt /data/ing/cfg3/bgc.txt Processing Item is: /data/cmd/for2/ght.txt /data/kernal/config.klgt.txt I want to process the above file to get the output file like, ... (5 Replies)
Discussion started by: rbalaj16
5 Replies

8. Shell Programming and Scripting

Awk script to match pattern till blank line

Hi, I need to match lines after a pattern, upto the first blank line. Searched in web and some forums but coulnt find the answer. where <restart_step> = 10 -- Execute query 20 -- Write the contents to the Oracle table 30 -- Writing Contents to OUTPUT... (7 Replies)
Discussion started by: justchill
7 Replies

9. Shell Programming and Scripting

How to print lines till till a pattern is matched in loop

Dear All I have a file like this 112534554 446538656 444695656 225696966 226569744 228787874 113536566 443533535 222564552 115464656 225445345 225533234 I want to cut the file into different parts where the first two columns are '11' . The first two columns will be either... (3 Replies)
Discussion started by: anoopvraj
3 Replies

10. UNIX for Dummies Questions & Answers

Read lines till a blank line is encountered

Hi, I have reached at a specified offset from the start of file. My requirement is that I want to read only those lines, which have the string READ / ALTER / UPDATE. As soon as, none of these literals are found in the subsequent line, I want to stop reading. Is there any feature of grep which... (1 Reply)
Discussion started by: saurabhsinha23
1 Replies

Featured Tech Videos