Find the answer to your Linux question:
Results 1 to 7 of 7
Hi. I have data like this: [1] private.enterprises.vender.generic.1.2.1.0 (OctetString): Text1 [2] private.enterprises.vender.generic.1.2.2.0 (OctetString): Text2 [3] private.enterprises.vender.generic.1.2.3.0 (Integer): Text3 [4] private.enterprises.vender.generic.1.2.4.0 (Integer): 4 [5] private.enterprises.vender.generic.1.2.5.0 (OctetString): 2010-01-21, 22:30:12 [6] private.enterprises.vender.generic.1.2.6.0 (Integer): ...
  1. #1
    Just Joined!
    Join Date
    Feb 2010
    Posts
    2

    Print lines with sed or awk

    Hi.

    I have data like this:

    [1] private.enterprises.vender.generic.1.2.1.0 (OctetString): Text1
    [2] private.enterprises.vender.generic.1.2.2.0 (OctetString): Text2
    [3] private.enterprises.vender.generic.1.2.3.0 (Integer): Text3
    [4] private.enterprises.vender.generic.1.2.4.0 (Integer): 4
    [5] private.enterprises.vender.generic.1.2.5.0 (OctetString): 2010-01-21, 22:30:12
    [6] private.enterprises.vender.generic.1.2.6.0 (Integer): Text4
    [7] private.enterprises.vender.generic.1.2.7.0 (Integer): 2
    [8] private.enterprises.vender.generic.1.2.8.0 (Integer): 2
    [9] private.enterprises.vender.generic.1.2.9.0 (Integer): 0
    [10] private.enterprises.vender.generic.1.2.10.0 (Integer): 12366
    [11] private.enterprises.vender.generic.1.2.11.0 (OctetString): None
    [12] private.enterprises.vender.generic.1.2.12.0 (OctetString): One or more ports
    [13] private.enterprises.vender.generic.1.2.13.0 (OctetString): Component=Ss7PieManager
    [14] private.enterprises.vender.generic.1.2.14.0 (ObjectIdentifier): private.en

    How do I precent this on one line:
    Text1 Text2 Text3 4 2010-01-21, 22:30:12 Text4 2 2 .....

    This output is from an HPOV. Every alarm has 14 lines.

    Thanks
    Ben

  2. #2
    Linux Enthusiast gerard4143's Avatar
    Join Date
    Dec 2007
    Location
    Canada, Prince Edward Island
    Posts
    714
    I can't understand the output pattern you want. You posted
    Code:
    Text1 Text2 Text3 4 2010-01-21, 22:30:12 Text4 2 2 .....
    could you give the exact pattern you expect from your example data file. Is it the last field your interested in?
    if it is:
    Code:
    awk '{printf("%s ", $NF)}' datafile
    Code:
    [1] private.enterprises.vender.generic.1.2.1.0 (OctetString): Text1
    [2] private.enterprises.vender.generic.1.2.2.0 (OctetString): Text2
    [3] private.enterprises.vender.generic.1.2.3.0 (Integer): Text3
    [4] private.enterprises.vender.generic.1.2.4.0 (Integer): 4
    [5] private.enterprises.vender.generic.1.2.5.0 (OctetString): 2010-01-21, 22:30:12
    [6] private.enterprises.vender.generic.1.2.6.0 (Integer): Text4
    [7] private.enterprises.vender.generic.1.2.7.0 (Integer): 2
    [8] private.enterprises.vender.generic.1.2.8.0 (Integer): 2
    [9] private.enterprises.vender.generic.1.2.9.0 (Integer): 0
    [10] private.enterprises.vender.generic.1.2.10.0 (Integer): 12366
    [11] private.enterprises.vender.generic.1.2.11.0 (OctetString): None
    [12] private.enterprises.vender.generic.1.2.12.0 (OctetString): One or more ports
    [13] private.enterprises.vender.generic.1.2.13.0 (OctetString): Component=Ss7PieManager
    [14] private.enterprises.vender.generic.1.2.14.0 (ObjectIdentifier): private.en
    Last edited by gerard4143; 02-01-2010 at 01:28 PM.
    Make mine Arch Linux

  3. #3
    Just Joined! simon's Avatar
    Join Date
    Oct 2005
    Location
    New Zealand
    Posts
    29
    As I understand your post, you want everything after the colon on a single line. You can do this via:

    Code:
    cat name_of_file | while read line; do foo=`cut -d ":" -f 2`; echo $foo; done
    On my system, copying the data you listed as input into a file (name_of_file) and running the above command produces exactly the output you requested.

  4. #4
    Just Joined!
    Join Date
    Feb 2010
    Posts
    1
    Hello,

    I could not find a better field separator for this kind of format tha "):".

    If this comes anywhere else then the code may fail.

    Write the text to file name input.txt then run the following command.

    awk -F"):" ' { print $NF }' input.txt | sed 's/^ //g'

    The sed is used to remove the spaces in front of lines.

  5. #5
    Just Joined!
    Join Date
    Feb 2010
    Posts
    2

    Thanks

    Thanks for responding.
    I know it is a dificult task. The output file is from an HP-OpenView, when too many alarms in DB then we have to take them out in a file.
    I would like to view this file, but havn't found a tool for viewing HP-OpenView alarm file. Maybe you know of one?

    Then I would like self to get the lines with the info I would like.
    If all alarms have 14 lines of data, Then I would like to see line 1, 2, 5 and 12 - ind one line.

    Thanks
    ben

  6. #6
    Just Joined!
    Join Date
    Mar 2006
    Posts
    29
    If i understand well, you need anything after the colon ( character :

    Code:
    #!/bin/sh
    
    IFS=$'\n'
    for i in `cat test.txt`; do
    
    echo "$i" | cut -d ':' -f 2- | sed 's%^ %%'
    done
    Hope it helps

  7. #7
    Linux Enthusiast gerard4143's Avatar
    Join Date
    Dec 2007
    Location
    Canada, Prince Edward Island
    Posts
    714
    Or you could call awk

    Code:
    awk '{for(i = 0; i <= NF; ++i){if (i > 3){printf("%s ", $i);}}}END{printf("\n");}' datafile
    Which produces the output

    Text1 Text2 Text3 4 2010-01-21, 22:30:12 Text4 2 2 0 12366 None One or more ports Component=Ss7PieManager private.en
    Make mine Arch Linux

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
...