Need a program that read a file line by line and prints out lines 1, 2 & 3 after an empty line...

Hello,

I need a program that read a file line by line and prints out lines 1, 2 & 3 after an empty line... An example of entries in the file would be:

 
SRVXPAPI001     ERRO    JUN24 07:28:34 1775      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
        0063A48C=IOCPBASE.BS01:READTRMNLSTATE+#002C 
        04D1C92C=CMAIFIH.BI03:AIF_CP_M+#05AC 
        00592F8C=MTSKERN.CY02:FORWARD_+#026C 
        0235EB54=MTSKERN.CY02:MTS_RECEIVE_P+#0354 
        0157C0DC=NFN59MOD.AB01:MTS_IRM_UDP_RX+#005C 
        0065B3A4=SCAIPPI.AK01:TPC_UDP_+#00C4 
        00658420=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER_O+#0340 
        00656FA4=SCAIPPI.AK01:SCA_POLL+#0104 
        006579D8=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER+#0058
 
SRVXPAPI001     ERRO    JUN24 07:28:41 2362      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
        0063A48C=IOCPBASE.BS01:READTRMNLSTATE+#002C 
        04D1C92C=CMAIFIH.BI03:AIF_CP_M+#05AC 
        00592F8C=MTSKERN.CY02:FORWARD_+#026C 
        0235EB54=MTSKERN.CY02:MTS_RECEIVE_P+#0354 
        0157C0DC=NFN59MOD.AB01:MTS_IRM_UDP_RX+#005C 
        0065B3A4=SCAIPPI.AK01:TPC_UDP_+#00C4 
        00658420=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER_O+#0340 
        00656FA4=SCAIPPI.AK01:SCA_POLL+#0104 
        006579D8=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER+#0058
 
SRVXPAPI001     ERRO    JUN24 07:38:38 7617      
        REASON= 0101, PROCID= #459E #102F: CALLP, DATA= 03BF 0556           
        05AFD5A0=CMCALLP.BX03:CM_RESET+#1598 
        0293B2CC=CMCALLP.BX03:CM_CALL_+#006C 
        0142F860=CALLP.HX01:CALL_PRO+#0080 
        004C46A0=MODULES.FS09:INITIALIZEP+#0020 
        004A2E60=PROCS.HK03:LIVEANDD+#0020
 
SRVXPAPI001     ERRO    JUN24 07:45:08 2144      
        REASON= 00FF, PROCID= #6584 #5008: MTXTASKP, INDEX= 0000
        04BAF5C0=CMARTRUI.BM01:ROUTE_AI+#0260 
        04BAD23C=CMARTRUI.BM01:AIF_DISPATCH+#005C 
        05C20CDC=CMAIFOH.BQ01:AIF_CP_D+#0460 
        051BEF0C=MTXOH.DD05:CELLULAR+#126C 
        04A26A6C=MTXCNPUI.CI01:SEND_CPN_MSG_FROM_I+#05AC 
        044BEBD8=MSCHOSV.AQ01:INFOFWD_+#0BF8 
        044BEF20=MSCHOSV.AQ01:PROCESS_+#0040 
        0441A0C0=MTXEVARB.AP02:DISTRIBUTE_I+#00C0 
        0441A250=MTXEVARB.AP02:DISTRIBUTE_N+#0050 
        04419FB8=MTXEVARB.AP02:DISTRIBUTE_E+#0018
 
SRVXPAPI001     ERRO    JUN24 08:12:04 0309      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
        0063A48C=IOCPBASE.BS01:READTRMNLSTATE+#002C 
        04D1C92C=CMAIFIH.BI03:AIF_CP_M+#05AC 
        00592F8C=MTSKERN.CY02:FORWARD_+#026C 
        0235EB54=MTSKERN.CY02:MTS_RECEIVE_P+#0354 
        0157C0DC=NFN59MOD.AB01:MTS_IRM_UDP_RX+#005C 
        0065B3A4=SCAIPPI.AK01:TPC_UDP_+#00C4 
        00658420=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER_O+#0340 
        00656FA4=SCAIPPI.AK01:SCA_POLL+#0104 
        006579D8=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER+#0058
 
SRVXPAPI001     ERRO    JUN24 08:12:21 1960      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
        0063A48C=IOCPBASE.BS01:READTRMNLSTATE+#002C 
        04D1C92C=CMAIFIH.BI03:AIF_CP_M+#05AC 
        00592F8C=MTSKERN.CY02:FORWARD_+#026C 
        0235EB54=MTSKERN.CY02:MTS_RECEIVE_P+#0354 
        0157C0DC=NFN59MOD.AB01:MTS_IRM_UDP_RX+#005C 
        0065B3A4=SCAIPPI.AK01:TPC_UDP_+#00C4 
        00658420=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER_O+#0340 
        00656FA4=SCAIPPI.AK01:SCA_POLL+#0104 
        006579D8=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER+#0058
 
SRVXPAPI001     ERRO    JUN24 08:22:05 0604      
        REASON= 00FF, PROCID= #6584 #5008: MTXTASKP, INDEX= 0000
        04BAF5C0=CMARTRUI.BM01:ROUTE_AI+#0260 
        04BAD23C=CMARTRUI.BM01:AIF_DISPATCH+#005C 
        05C20CDC=CMAIFOH.BQ01:AIF_CP_D+#0460 
        051BEF0C=MTXOH.DD05:CELLULAR+#126C 
        04A26A6C=MTXCNPUI.CI01:SEND_CPN_MSG_FROM_I+#05AC 
        044BEBD8=MSCHOSV.AQ01:INFOFWD_+#0BF8 
        044BEF20=MSCHOSV.AQ01:PROCESS_+#0040 
        0441A0C0=MTXEVARB.AP02:DISTRIBUTE_I+#00C0 
        0441A250=MTXEVARB.AP02:DISTRIBUTE_N+#0050 
        04419FB8=MTXEVARB.AP02:DISTRIBUTE_E+#0018
 

From that output I only need to get:

SRVXPAPI001     ERRO    JUN24 07:28:34 1775      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
 
SRVXPAPI001     ERRO    JUN24 07:28:41 2362      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
 
SRVXPAPI001     ERRO    JUN24 07:38:38 7617      
        REASON= 0101, PROCID= #459E #102F: CALLP, DATA= 03BF 0556           
        05AFD5A0=CMCALLP.BX03:CM_RESET+#1598 
 
SRVXPAPI001     ERRO    JUN24 07:45:08 2144      
        REASON= 00FF, PROCID= #6584 #5008: MTXTASKP, INDEX= 0000
        04BAF5C0=CMARTRUI.BM01:ROUTE_AI+#0260 
 
SRVXPAPI001     ERRO    JUN24 08:12:04 0309      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
 
SRVXPAPI001     ERRO    JUN24 08:12:21 1960      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
 
SRVXPAPI001     ERRO    JUN24 08:22:05 0604      
        REASON= 00FF, PROCID= #6584 #5008: MTXTASKP, INDEX= 0000
        04BAF5C0=CMARTRUI.BM01:ROUTE_AI+#0260 

And after that make a report...

It�d be so useful to have a program that does it as the daily file contains at least 20K+ records :S

What have you tried so far? What OS and shell are you using?

If you have GNU awk, try:

$ awk '{print $1 OFS $2 OFS $3}' RS='\n \n' ORS='\n \n' FS='\n' OFS='\n' file
SRVXPAPI001     ERRO    JUN24 07:28:34 1775
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C

SRVXPAPI001     ERRO    JUN24 07:28:41 2362
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C

SRVXPAPI001     ERRO    JUN24 07:38:38 7617
        REASON= 0101, PROCID= #459E #102F: CALLP, DATA= 03BF 0556
        05AFD5A0=CMCALLP.BX03:CM_RESET+#1598

SRVXPAPI001     ERRO    JUN24 07:45:08 2144
        REASON= 00FF, PROCID= #6584 #5008: MTXTASKP, INDEX= 0000
        04BAF5C0=CMARTRUI.BM01:ROUTE_AI+#0260

SRVXPAPI001     ERRO    JUN24 08:12:04 0309
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C

SRVXPAPI001     ERRO    JUN24 08:12:21 1960
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C

SRVXPAPI001     ERRO    JUN24 08:22:05 0604
        REASON= 00FF, PROCID= #6584 #5008: MTXTASKP, INDEX= 0000
        04BAF5C0=CMARTRUI.BM01:ROUTE_AI+#0260
1 Like
awk '!NF{c=0;print;next}++c<=3' file
3 Likes

Thank you Yoda and CarloM

Yoda

awk '!NF{c=0;print;next}++c<=3' 20140624-swerrs

CarloM

awk '{print $1 OFS $2 OFS $3}' RS='\n \n' ORS='\n \n' FS='\n' OFS='\n' 20140624

Both codes did the work.

I am using

$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.5 (Santiago)
$ echo $SHELL
/bin/bash

I am a newbie in Unix/Linux world, I work in telecommunications.

Thank you all!

While awk works well you could have also user egrep and grep -v as in:

egrep -A3 "^$" | grep -v "^$"

Hello gandolf989,

Tried your command with no luck at all, maybe I am doing something wrong:

$ egrep -A3 "^$" | grep -v "^$"
^C
$ egrep -A3 "^$" 20140624-swerrs| grep -v "^$"
$ egrep -A3 "^$" | grep -v "^$" 20140624-swerrs

SRVXPAPI001     ERRO    JUN24 07:09:09 0140      
        REASON= 0000, PROCID= #E59C #1011: CALLP, INDEX= 2BAD
        056D0B44=CCSMUI.AO08:CCSM_ERR+#0064 
        056C6CB4=MTXCBTG.AO16:MTX_HOLD_C+#08B4 
        024AB1A4=FTRUTLUI.DI01:HANDLE_H+#1144 
        024AC2A4=FTRUTLUI.DI01:HELD_SUP+#0544 
        024ACA1C=FTRUTLUI.DI01:HOLD+#019C 
        024ACDF4=FTRUTLUI.DI01:HOLDCONN+#0294 
        024B3068=FTRNETUI.DK01:FLIPFLOP+#0108 
        05BC048C=MTXCWTEV.CU03:CW_TALKI+#048C 
        049AC2EC=MTXCWTUI.CR07:MTX_CWT_INVOKE_HANDLER+#006C 
        049E4350=MTXCWTEV.CU03:CW_REALE+#0550
 
SRVXPAPI001     ERRO    JUN24 07:28:34 1775      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
        0063A48C=IOCPBASE.BS01:READTRMNLSTATE+#002C 
        04D1C92C=CMAIFIH.BI03:AIF_CP_M+#05AC 
        00592F8C=MTSKERN.CY02:FORWARD_+#026C 
        0235EB54=MTSKERN.CY02:MTS_RECEIVE_P+#0354 
        0157C0DC=NFN59MOD.AB01:MTS_IRM_UDP_RX+#005C 
        0065B3A4=SCAIPPI.AK01:TPC_UDP_+#00C4 
        00658420=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER_O+#0340 
        00656FA4=SCAIPPI.AK01:SCA_POLL+#0104 
        006579D8=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER+#0058
 
SRVXPAPI001     ERRO    JUN24 07:28:41 2362      
        REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F
        00637BDC=IOCPBASE.BS01:CHECK_TID+#009C 
        0063A48C=IOCPBASE.BS01:READTRMNLSTATE+#002C 
        04D1C92C=CMAIFIH.BI03:AIF_CP_M+#05AC 
        00592F8C=MTSKERN.CY02:FORWARD_+#026C 
        0235EB54=MTSKERN.CY02:MTS_RECEIVE_P+#0354 
        0157C0DC=NFN59MOD.AB01:MTS_IRM_UDP_RX+#005C 
        0065B3A4=SCAIPPI.AK01:TPC_UDP_+#00C4 
        00658420=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER_O+#0340 
        00656FA4=SCAIPPI.AK01:SCA_POLL+#0104 
        006579D8=SCAIPPI.AK01:TPCIP_INCOMING_MSG_HANDLER+#0058
 

It's looking for empty lines to match (and then discard), but your input actually has a space.

Try:

grep -A3  "^ $" 20140624-swerrs| grep -v "^ $"

EDIT: Actually,

grep -A3 --no-group-separator "^ $" 20140624-swerrs

depending whether you prefer dashes or blank(ish) lines as record separators.

Also try

Print n number of records after blank lines, change variable n according to your need

$ awk 'c && c--; !NF{c=n}' n='3'  file

---------- Post updated at 04:26 PM ---------- Previous update was at 04:07 PM ----------

if you need blank line as well use this, we can leave next here

$ awk 'c && c--; !NF{c=n;print}' n='3'  file