Filter and sort the file using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Filter and sort the file using awk
# 1  
Old 11-15-2017
Filter and sort the file using awk

I have file and process it and provide clean output.

input file
Code:
Device Symmetrix Name    : 000A4
Device Symmetrix Name    : 000A5
Device Symmetrix Name    : 000A6
Device Symmetrix Name    : 000A7
Device Symmetrix Name    : 000A8
Device Symmetrix Name    : 000A9
Device Symmetrix Name    : 000AA
Device Symmetrix Name    : 000AB
    Device Symmetrix Name                  : 000AB
    RDF Type                               : R1
    Remote Device Symmetrix Name           : 000A1
    Remote Symmetrix ID                    : frame1
Device Symmetrix Name    : 000AC
    Device Symmetrix Name                  : 000AC
    RDF Type                               : R1
    Remote Device Symmetrix Name           : 000A2
    Remote Symmetrix ID                    : frame1
Device Symmetrix Name    : 000AD
    Device Symmetrix Name                  : 000AD
    RDF Type                               : R1
    Remote Device Symmetrix Name           : 000A3
    Remote Symmetrix ID                    : frame1

I need output as below

First i want to remove all the device which doest dont have R1 Device
Second on need to paste in one line and remove all blank space

Need output like this

Code:
Device Symmetrix Name : 000AB,RDF Type : R1,Remote Device Symmetrix Name : 000A1,Remote Symmetrix ID : frame1
Device Symmetrix Name : 000AC,RDF Type : R1,Remote Device Symmetrix Name : 000A2,Remote Symmetrix ID : frame1
Device Symmetrix Name : 000AD,RDF Type : R1,Remote Device Symmetrix Name : 000A3,Remote Symmetrix ID : frame1

# 2  
Old 11-15-2017
What have you tried?
# 3  
Old 11-15-2017
I am not getting any idea how to get this output doing manual.
# 4  
Old 11-15-2017
Hello ranjancom2000,

I have a few to questions pose in response first:-
  • What have you tried so far?
  • What output/errors do you get?
  • What OS and version are you using?
  • What are your preferred tools? (C, shell, perl, awk, etc.)
  • What logical process have you considered? (to help steer us to follow what you are trying to achieve)
Most importantly, What have you tried so far?

There are probably many ways to achieve most tasks, so giving us an idea of your style and thoughts will help us guide you to an answer most suitable to you so you can adjust it to suit your needs in future.

Just saying "I don't know" or similar doesn't help us to help you much. If you were to do this as a human, what steps would you follow to process the data?


We're all here to learn and getting the relevant information will help us all.


Thanks, in advance,
Robin
# 5  
Old 11-15-2017
thanks for the support i found the way to filter. Need to know is there any simpler way

Code:
 grep -i -v "    Device Symmetrix Name    :"|tr -d "[:blank:]"|paste -d, - - - -

# 6  
Old 11-15-2017
Try also
Code:
awk '
!$1     {gsub (/[       ]+/, " ")
         printf "%s,", $0
         TRS = ORS
        }
$1      {printf TRS
        }
END     {printf TRS
        }
' FS="[ 	]*" file

This User Gave Thanks to RudiC For This Post:
# 7  
Old 11-15-2017
Hello ranjancom2000,

Could you please try following and let me know if this helps you.
Code:
awk '/^Device Symmetrix Name/{next} /^ +Device Symmetrix Name/{flag=1;if(ac_flag){print ""};sub(/^ +/,"");sub(/ +:/,":");val=$0;ac_flag="";next} /RDF Type.*R1/ && flag{sub(/^ +/,"");sub(/ +:/,":");printf("%s %s ",val,$0);flag="";ac_flag=1;next} ac_flag{sub(/^ +/,"");sub(/ +:/,":");printf(",%s",$0)}END{print ""}'    Input_file

Output will be as follows.
Code:
Device Symmetrix Name: 000AB RDF Type: R1 ,Remote Device Symmetrix Name: 000A1,Remote Symmetrix ID: frame1
Device Symmetrix Name: 000AC RDF Type: R1 ,Remote Device Symmetrix Name: 000A2,Remote Symmetrix ID: frame1
Device Symmetrix Name: 000AD RDF Type: R1 ,Remote Device Symmetrix Name: 000A3,Remote Symmetrix ID: frame1

EDIT: Adding a non-one liner form of solution too now.
Code:
awk '
/^Device Symmetrix Name/{
  next
}
/^ +Device Symmetrix Name/{
  flag=1;
  if(ac_flag){
    print ""
};
  sub(/^ +/,"");
  sub(/ +:/,":");
  val=$0;
  ac_flag="";
  next
}
/RDF Type.*R1/ && flag{
  sub(/^ +/,"");
  sub(/ +:/,":");
  printf("%s %s ",val,$0);
  flag="";
  ac_flag=1;
  next
}
ac_flag{
  sub(/^ +/,"");
  sub(/ +:/,":");
  printf(",%s",$0)
}
END{
  print ""
}'    Input_file

Thanks,
R. Singh

Last edited by RavinderSingh13; 11-15-2017 at 09:54 AM.. Reason: Adding a non-one liner form of solution too now.
This User Gave Thanks to RavinderSingh13 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Awk/sed/cut to filter out records from a file based on criteria

I have two files and would need to filter out records based on certain criteria, these column are of variable lengths, but the lengths are uniform throughout all the records of the file. I have shown a sample of three records below. Line 1-9 is the item number "0227546_1" in the case of the first... (15 Replies)
Discussion started by: MIA651
15 Replies

2. Shell Programming and Scripting

awk to filter file based on seperate conditions

The below awk will filter a list of 30,000 lines in the tab-delimited file. What I am having trouble with is adding a condition to SVTYPE=CNV that will only print that line if CI= must be >.05 . The other condition to add is if SVTYPE=Fusion, then in order to print that line READ_COUNT must... (3 Replies)
Discussion started by: cmccabe
3 Replies

3. Shell Programming and Scripting

awk to filter file using another working on smaller subset

In the below awk if I use the attached file as the input, I get no results for TCF4. However, if I just copy that line from the attached file and use that as input I get results for TCF4. Basically the gene file is a 1 column list that is used to filter $8 of the attached file. When there is a... (9 Replies)
Discussion started by: cmccabe
9 Replies

4. Shell Programming and Scripting

awk to filter file using range in another file

I have a very large tab-delimited, ~2GB file2 that I am trying to filter using $2 of file1. If $2 of file1 is in the range of $2 and $3 in file1 then the entire line of file2 is outputed. If the range match is not found then that line is skipped. The awk below does run but no output results. ... (3 Replies)
Discussion started by: cmccabe
3 Replies

5. Shell Programming and Scripting

awk filter by columns of file csv

Hi, I would like extract some lines from file csv using awk , below the example: I have the file test.csv with in content below. FLUSSO;COD;DATA_LAV;ESITO ULL;78;17/09/2013;OL ULL;45;05/09/2013;Apertura NP;45;13/09/2013;Riallineamento ULLNP;78;17/09/2013;OL NPG;14;12/09/2013;AperturaTK... (6 Replies)
Discussion started by: giankan
6 Replies

6. Shell Programming and Scripting

Help with awk, using a file to filter another one

I have a main file: ... 17,466971 0,095185 17,562156 id 676 17,466971 0,096694 17,563665 id 677 17,466971 0,09816 17,565131 id 678 17,466971 0,099625 17,566596 id 679 17,466971 0,101091 17,568062 id 680 17,466971 0,016175 17,483146 id... (4 Replies)
Discussion started by: boblix
4 Replies

7. Shell Programming and Scripting

awk-filter record by another file

I have file1 3049 3138 4672 22631 45324 112382 121240 125470 130289 186128 193996 194002 202776 228002 253221 273523 284601 284605 641858 (8 Replies)
Discussion started by: biomed
8 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

Filter records in a file using AWK

I want to filter records in one of my file using AWK command (or anyother command). I am using the below code awk -F@ '$1=="0003"&&"$2==20100402" print {$0}' $INPUT > $OUTPUT I want to pass the 0003 and 20100402 values through a variable. How can I do this? Any help is much... (1 Reply)
Discussion started by: gpaulose
1 Replies

10. Shell Programming and Scripting

filter parts of a big file using awk or sed script

I need an assistance in file generation using awk, sed or anything... I have a big file that i need to filter desired parts only. The objective is to select (and print) the report # having the string "apple" on 2 consecutive lines in every report. Please note that the "apple" line has a HEX... (1 Reply)
Discussion started by: apalex
1 Replies
Login or Register to Ask a Question