Move a block of lines to file if string found in the block.


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Move a block of lines to file if string found in the block.
# 1  
Old 10-31-2012
Move a block of lines to file if string found in the block.

I have a "main" file which has blocks of data for each user defined by tags BEGIN and END.
Code:
BEGIN
ID_NUM:24879
USER:abc123 
HOW:47M
CMD1:xyz1
CMD2:arp2
STATE:active
PROCESS:id60
END
BEGIN
ID_NUM:24880
USER:def123 
HOW:4M
CMD1:xyz1
CMD2:xyz2
STATE:running
PROCESS:id64
END
BEGIN
ID_NUM:24881
USER:def123 
HOW:8M
CMD1:xyz1
CMD2:xyz3
STATE:inactive
PROCESS:id77
END
BEGIN
ID_NUM:24882
USER:abc123 
HOW:87M
CMD1:xyz1
CMD2:xyz4
CMD2:xyz3
STATE:running
PROCESS:id99
END

I have another file with just user id's in there which needs to be filtered.
For example, this file has 3 id's
Code:
abc123
def123
ghi123

I want to create separate files for each user with the blocks of data inside that main file.
For example, since the first two users are in the main file, I want to create 2 separate files with "blocks" of data related to just that specific user in each file.
Please note that the number of lines that can be in a "block"(lines between BEGIN and END tags) vary for each user.

Any help or ideas in creating this script would be much appreciated.

Thanks
# 2  
Old 10-31-2012
try

Code:
awk -F "[: ]" 'FNR==NR{if($0 ~ /BEGIN/){a[PD]=$0}else if($0 ~ /END/){Y[s]=a[PD]"\n"$0}else{a[PD]=a[PD]"\n"$0;if($0 ~ /USER/){s=$2}};next}
{if(Y[$0]{print Y[$0] > $0".txt"}}' main_file file2

It will create two files.

abc123.txt and def123.txt
# 3  
Old 10-31-2012
Code:
awk 'FNR==NR{a[$1];next}
/BEGIN/{s=1}
s{t=t?t RS $0:$0}
/USER/ && s{
sub(/[ \t]*$/,"",$2)
if($2 in a) found=$2
else {s=0;t=""}
}
/END/ && s && length(found){
f = found ".txt"
print t >> f
close(f)
s=0;t=""}' lookup_file FS=: main_file

# 4  
Old 11-02-2012
Hi Pamu, Your code did not work for me. I ran your code from command prompt, and it gave me an error. (I executed your code using the same exact files above)
Code:
 
awk: syntax error near line 1
awk: bailing out near line 1

And Elixir, How am I supposed to run your code? put it in a wrapper and run? or run from command prompt?

Thanks Again for your time.
# 5  
Old 11-02-2012
You can run it both ways:-
1. Put it in a file, give execute permission and run.
2. Copy & Paste it to your command prompt and run.

Note: just make sure you have your files named as lookup_file & main_file like elixir_sinari used or change them in code as per your choice.
# 6  
Old 11-08-2012
Elixir,
Your method did not work either. I got the same error.
Here is my uname o/p just in case:
SunOS c1dupep4 5.10 Generic_147440-25 sun4v sparc SUNW,SPARC-Enterprise-T5120
# 7  
Old 11-08-2012
Quote:
Originally Posted by grep_me
Elixir,
Your method did not work either. I got the same error.
Here is my uname o/p just in case:
SunOS c1dupep4 5.10 Generic_147440-25 sun4v sparc SUNW,SPARC-Enterprise-T5120
use 'nawk' instead of 'awk'
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

awk - (URGENT!) Print lines sort and move lines if match found

URGENT HELP IS NEEDED!! I am looking to move matching lines (01 - 07) from File1 and 77 tab the matching string from File2, to File3.txt. I am almost done but - Currently, script is not printing lines to File3.txt in order. - Also the matching lines are not moving out of File1.txt ... (1 Reply)
Discussion started by: High-T
1 Replies

2. Shell Programming and Scripting

Printing a block of lines from a file, if that block does not contain two patterns using sed

I want to process a file block by block using sed, and if that block does not contain two patterns, then that complete block has to be printed. See below for the example data. ................................server 1............................... running process 1 running... (8 Replies)
Discussion started by: Kesavan
8 Replies

3. Shell Programming and Scripting

Removing a block of duplicate lines from a file

Hi all, I have a file with the data 1 abc 2 123 3 ; 4 rao 5 bell 6 ; 7 call 8 abc 9 123 10 ; 11 rao 12 bell 13 ; (10 Replies)
Discussion started by: raosr020
10 Replies

4. Shell Programming and Scripting

extracting block of lines from a file

consider the input file which i am dealing with looks like this.. #cat 11.sql create table abc ( . . . ) engine=Innodb ; . . etc . . . create table UsM ( blah blah blah ) engine=Innodb ; (5 Replies)
Discussion started by: vivek d r
5 Replies

5. Linux

Find String in FileName and move the String to new File if not found

Hi all, I have a question.. Here is my requirement..I have 500 files in a path say /a/b/c I have some numbers in a file which are comma seperated...and I wanted to check if the numbers are present in the FileName in the path /a/b/c..if the number is there in the file that is fine..but if... (1 Reply)
Discussion started by: us_pokiri
1 Replies

6. Shell Programming and Scripting

Grep between block of lines in a file

Hi Friends, I have a file which has many of the statements like below ******** MAKING > noun1 < cg_all statements statements statements ********* MAKING > noun2 < cg_all statements statements statements ********* MAKING > noun3 < all statements statements statements I would... (3 Replies)
Discussion started by: ganga.dharan
3 Replies

7. Shell Programming and Scripting

Counting lines in each block file

hello im new here so i want to say hi everybody :) i have to write a script and im newbie :/ i hope that in this forum are many ppl who knows subject :) i have hundrets folders. in each folder is a file name trace.txt. each trace.txt has a lot of tracert's results separates with "-----" it... (6 Replies)
Discussion started by: michael8484
6 Replies

8. Shell Programming and Scripting

Replacing Block of lines in a text file

Dear All, Regards of the Day. I have a text file with some functions: Function1 { parameter 1 parameter 2 parameter 3 } end Function2 { parameter 1 parameter 2 parameter 3 } (1 Reply)
Discussion started by: ashisharora
1 Replies

9. Shell Programming and Scripting

Read block of lines from xml file

Hi I am new to this forum. I have few XML files and from each xml file I want to copy some specific 50 no of lines and copy them to some other file. how to do that? pls help.. (5 Replies)
Discussion started by: pritam1980
5 Replies

10. Shell Programming and Scripting

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

I have a file which contains blocks of text - each block is a multi-lines text delimited by blank lines eg. <blank line> several lines of text ... pattern found on this line several more lines of text ... <blank line> How do you delete the block of text (including the blank lines) when... (17 Replies)
Discussion started by: gleu
17 Replies
Login or Register to Ask a Question