Remove part of the file using a condition

Gents,

Is there the chance to remove part of the file,

Taking in consideration this condition.

For each record the first row start with the string

 % VE 

should be 56 rows for each records..

first row = % VE
last row = % sw

total 56 rows for each record.

Then in the case that the record have less than 56 lines, I would like to delele complete information for that record...

input

% VE
% No
% SL
% SN
% SI
% St
% Fl
% Ds
% Sw
% Sw
% Sw
% Dr
% Gp 10001
% GN 20001
% GN
% GP
% PT
% TB
% QC
% Ti
% EX
%   
%   
%Tim
0.5 
1.0 
1.5 
2.0 
2.5 
3.0 
3.5 
4.0 
4.5 
5.0 
5.5 
6.0 
6.5 
7.0 
7.5 
8.0 
8.5 
9.0 
9.5 
10.0
10.5
11.0
11.5
12.0
% ti
% pa
% pa
% ti
% ti
% ti
% ti
% sw

% VE
% No
% SL
% SN
% SI
% St
% Fl
% Ds
% Sw
% Sw
% Sw
% Dr
% Gp 30001
% GN 20001
% GN
% GP
% PT
% TB
% QC
% Ti
% EX
%   
%   
%Tim
0.5 
1.0 
1.5 
2.0 
2.5 
3.0 
3.5 
4.0 
11.5
12.0
% ti
% pa
% pa
% ti
% ti
% ti
% ti
% sw

% VE
% No
% SL
% SN
% SI
% St
% Fl
% Ds
% Sw
% Sw
% Sw
% Dr
% Gp 2001
% GN 1001
% GN
% GP
% PT
% TB
% QC
% Ti
% EX
%   
%   
%Tim
0.5 
1.0 
1.5 
2.0 
2.5 
3.0 
3.5 
4.0 
4.5 
5.0 
5.5 
6.0 
6.5 
7.0 
7.5 
8.0 
8.5 
9.0 
9.5 
10.0
10.5
11.0
11.5
12.0
% ti
% pa
% pa
% ti
% ti
% ti
% ti
% sw

Output desired

% VE
% No
% SL
% SN
% SI
% St
% Fl
% Ds
% Sw
% Sw
% Sw
% Dr
% Gp 10001
% GN 20001
% GN
% GP
% PT
% TB
% QC
% Ti
% EX
%   
%   
%Tim
0.5 
1.0 
1.5 
2.0 
2.5 
3.0 
3.5 
4.0 
4.5 
5.0 
5.5 
6.0 
6.5 
7.0 
7.5 
8.0 
8.5 
9.0 
9.5 
10.0
10.5
11.0
11.5
12.0
% ti
% pa
% pa
% ti
% ti
% ti
% ti
% sw

% VE
% No
% SL
% SN
% SI
% St
% Fl
% Ds
% Sw
% Sw
% Sw
% Dr
% Gp 2001
% GN 1001
% GN
% GP
% PT
% TB
% QC
% Ti
% EX
%   
%   
%Tim
0.5 
1.0 
1.5 
2.0 
2.5 
3.0 
3.5 
4.0 
4.5 
5.0 
5.5 
6.0 
6.5 
7.0 
7.5 
8.0 
8.5 
9.0 
9.5 
10.0
10.5
11.0
11.5
12.0
% ti
% pa
% pa
% ti
% ti
% ti
% ti
% sw

Thanks for your help

Try:

awk 'NF==56' FS='\n' RS= ORS='\n\n' file

This should work if there are empty lines between the records, like in your sample.

1 Like

Dear Scrutinizer
It works fine.. thanks a lot.
Is there the option to get the data removed in separate file..
Thanks again

Hi jiam912, you are welcome. Try something like :

awk 'NF!=56{print>(FILENAME ".faulty")}1' FS='\n' RS= ORS='\n\n' file
1 Like

Dear Scrutinizer,

It works, thanks a lot.