awk Help: Filter Multiple Entry & print in one line.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk Help: Filter Multiple Entry & print in one line.
# 1  
Old 01-29-2013
awk Help: Filter Multiple Entry & print in one line.

AWK Gurus,

data:

Code:
srvhcm01 AZSCI
srvhcm01 AZSDB
srvhcm01 BZSDB
srvhcm01 E2QDI31
srvhcm01 YPDCI
srvhcm01 YPDDB
srvhcm01 UV2FSCR
srvhcm01 UV2FSBI
srvhcm01 UV2FSXI
srvhcm01 UV2FSUC
srvhcm01 UV2FSEP
srvhcm01 UV2FSRE
srvhcm01 NASCI
srvhcm01 NASDB
srvhcm01 UV2FSSL
srvhcm01 UV2FSDI
srvhcm05 KASCI
srvhcm05 KASDB
srvhcm05 E2SCI
srvhcm05 YPSDB
srvhcm05 YPSCI
srvhcm05 AZDDB


Want to get output like this:

Code:
srvhcm01 AZSCI AZSDB BZSDB E2QDI31 YPDCI YPDDB UV2FSCR UV2FSBI UV2FSXI UV2FSUC UV2FSEP UV2FSRE NASCI NASDB UV2FSSL UV2FSDI 
srvhcm05 KASCI KASDB E2SCI YPSDB YPSCI AZDDB



Please advise with awk or sed,
Thanks a lot,
# 2  
Old 01-29-2013
Code:
awk 'NR==1{p=$1; printf "%s ",$0; next}p==$1{ printf "%s ",$2;}p!=$1{printf "\n%s ",$0; p=$1; next}' filename

This User Gave Thanks to Yoda For This Post:
# 3  
Old 01-29-2013
Code:
awk 'p!=$1{if(p)print s; s=p=$1}{s=s OFS $2} END{print s}' file

This User Gave Thanks to Scrutinizer For This Post:
# 4  
Old 01-29-2013
bipinajith,
This is a great code , it worked like charm.
Could you please explain how it work all together.

The 2nd part seems more compliated where p!=$1 ,


Thanks a lot again.

---------- Post updated at 07:05 PM ---------- Previous update was at 07:01 PM ----------

Scrutinizer,

This is also a great code.It worked like a charm and indeed got the last Carriage return that I didnt get in the other solution.
Code:
awk 'p!=$1{if(p)print s; s=p=$1}{s=s OFS $2} END{print s}' file

This looks more complicated, can you please explain little bit , like
Code:
if(p)print s

& OFS portion,
Thanks a lot again.
# 5  
Old 01-29-2013
Inserted newline at end:
Code:
awk ' NR==1 {           # If first record
   p=$1;                # Set p = field 1
   printf "%s ",$0;     # printf entire record in same line
   next;
} p==$1 {               # if p == field 1
   printf "%s ",$2;     # printf only field 2 in same line
} p!=$1 {               # if p != field 1
   printf "\n%s ",$0;   # printf entire record in newline
   p=$1;                # Set p = field 1
   next;
} END {
   printf "\n";
}' filename

This User Gave Thanks to Yoda For This Post:
# 6  
Old 01-29-2013
if(p)print s means if the previous result p is not empty then print the string s. OFS is the output field separator which defaults to a single space..
This User Gave Thanks to Scrutinizer For This Post:
# 7  
Old 01-29-2013
Thanks bipinajith for the detail explanation:

what is the function of next; is it for loop.

---------- Post updated at 08:35 PM ---------- Previous update was at 08:33 PM ----------

Scrutinizer ,
Thanks again, ..You guys are awesome coder & programmer. Thanks.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to replace multiple "&nbsp;" entry with in <td> tag into single entry using sed?

I have the input file like this. Input file: 12.txt 1) There are one or more than one <tr> tags in same line. 2) Some tr tags may have one <td> or more tna one <td> tags within it. 3) Few <td> tags having "<td> &nbsp; </td>". Few having more than one "&nbsp;" entry in it. <tr> some td... (4 Replies)
Discussion started by: thomasraj87
4 Replies

2. UNIX for Dummies Questions & Answers

How to create a print filter that print text & image?

Currently, I have a print filter that takes a text file, that convert it into PCL which then gets to a HP printer. This works. Now I need to embedded a image file within the text file. I'm able to convert the image file into PCL and I can cat both files together to into a single document... (1 Reply)
Discussion started by: chedlee88-1
1 Replies

3. Shell Programming and Scripting

awk to filter multiple lines

Hi. I need to filter lines based upon matches in multiple tab-separated columns. For all matching occurrences in column 1, check the corresponding column 4. IF all column 4 entries are identical, discard all lines. If even one entry in column 4 is different, then keep all lines. How can I... (5 Replies)
Discussion started by: owwow14
5 Replies

4. Shell Programming and Scripting

awk : Filter a set of data to parse header line and last field of multiple same match.

Hi Experts, I have a data with multiple entry , I want to filter PKG= & the last column "00060110" or "00088150" in the output file: ############################################################################################### PKG= P8SDB :: VGS = vgP8SOra vgP8SDB1 vgP8S001... (5 Replies)
Discussion started by: rveri
5 Replies

5. Shell Programming and Scripting

(awk?) print multiple lines on one line

I have a log file something like ------- report 1 ------- date 27/01/13 time 08:00 records 1234 ------- report 2------- date 27/01/13 time 08:00 records 1239 ... I'd like output to show as report 1,date 27/01/13,time 08:00,records 1234 report 2,date 27/01/13,time... (6 Replies)
Discussion started by: gefa
6 Replies

6. Shell Programming and Scripting

select entry from consecutive line awk

Hi folks, I have a file with four columns that looks like the following (tab separated) 1 1 1 a 2 2 2 b 3 3 3 c 4 4 4 d I would like to create a file with always 4 columns but where the third entry corresponds to the thirst entry of the next line and so on, to get the following 1 1 2 a... (4 Replies)
Discussion started by: klebsiella
4 Replies

7. Linux

awk filter & Auto gen Mail

hi experts 2012-01-30 10:30:01:812 "y" "NA" "30/01/2012 10:30:01:154 AM" 2012-01-30 10:33:46:342 "y" "NA" "30/01/2012 10:33:45:752 AM" 2012-01-30 10:41:11:148 "n" "200" "30/01/2012 10:41:10:558 AM" 2012-01-30 10:44:48:049 "y" "NA" ... (7 Replies)
Discussion started by: nith_anandan
7 Replies

8. Shell Programming and Scripting

AWK filter from file and print

Dear all, I am using awk to filter some data like this:- awk 'NR==FNR{a;next}($1 in a)' FS=":" filter.dat data.dat >! out.dat where the filter and input data look like this:- filter.dat... n_o00j_1900_40_007195350_0:n_o00j_1940_40_007308526... (3 Replies)
Discussion started by: atb299
3 Replies

9. Shell Programming and Scripting

awk: Multiple search patterns & print in an one liner

I would like to print result of multiple search pattern invoked from an one liner. The code looks like this but won't work gawk -F '{{if ($0 ~ /pattern1/) pat1=$1 && if ($0 ~ /pattern2/) pat2=$2} ; print pat1, pat2}' Can anybody help getting the right code? (10 Replies)
Discussion started by: sdf
10 Replies

10. Shell Programming and Scripting

filter out a sequence from multiple lines line

Hi, I have an unwanted string at random lines of my verilog (*.v) file. (* abccddee *) input A; (* xyz *) input B; (* 1234 *) output C; I want a clean file like this: input A; input B; output C; the unwanted string begins with "(*" and ends with "*)" at multiple lines. Any help... (2 Replies)
Discussion started by: return_user
2 Replies
Login or Register to Ask a Question