Custom Report


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Custom Report
# 1  
Old 09-11-2017
Custom Report

Hi All,

Am getting the raw report from the source and need to prepare the custom report as per the requirement.

Requirement keep getting change according to the need.

Raw data is as below
Code:
/* ----------------- test_job_hu ----------------- */

insert_job: test_job_hu   job_type: CMD
command: sleep 600
machine: localhost
owner: account
permission: gx,wx
date_conditions: 0
std_out_file: "/tmp/$AUTO_JOB_NAME.out"
std_err_file: "/tmp/$AUTO_JOB_NAME.err"
alarm_if_fail: 1
group: P2
application: TBS_00_AXZCDE_Admin
send_notification: 1
notification_msg: "test_job_hu job completed in HU NP"
notification_emailaddress: pradeep.agarwal@in.com



/* ----------------- test_machine ----------------- */

insert_job: test_machine   job_type: CMD
box_name: test_machine_box
command: echo $HOME
machine: HULNXMACHINE
owner: svc_account@hu.europe.com
permission: gx,wx
date_conditions: 0
alarm_if_fail: 1



/* ----------------- test_machine ----------------- */

insert_job: test_web_cmd   job_type: CMD
box_name: test_web_box
command: dir
machine: HUWINMACHINE
owner: svc_account@hu.europe.com
permission: gx,wx
date_conditions: 0
alarm_if_fail: 0
application: my_web_application
group: P1



I want the custom report as below.

Code:
JOB_NAME;JOB_TYPE;box_name;command;machine;owner;permission;date_conditions;std_out_file;std_err_file;alarm_if_fail;group;application;send_notification;notification_msg,notification_emailaddress;
test_job_hu;CMD; ;sleep 600;localhost;account;gx,wx;0;/tmp/$AUTO_JOB_NAME.out;/tmp/$AUTO_JOB_NAME.err;1,P2;TBS_00_AXZCDE_Admin;1;test_job_hu job completed in HU NP;pradeep.agarwal@in.com;
test_machine;CMD;test_machine_box;echo $HOME;HULNXMACHINE;svc_account@hu.europe.com;gx,wx;0; ; ;1; ; ; ; ; ;
test_web_cmd;CMD;test_web_box,dir;HUWINMACHINE;svc_account@hu.europe.com;gx,wx;0; ; ;0;P1;my_web_application; ; ; ;

Details of System:
  • File comes as a plain text file
  • O/S: CentOS release 6.9 (Final) and Red Hat Enterprise Linux Server release 6.5 (Santiago)
  • Shell: BASH

Last edited by rbatte1; 09-11-2017 at 11:52 AM.. Reason: Converted Details of System to formatted list with LIST tags
# 2  
Old 09-11-2017
Hello pradeep84in,

I have a few to questions pose in response first:-
  • What have you tried so far?
  • What output/errors do you get?
  • 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?

Whilst there is lots of useful information in your post, 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.


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



Kind regards,
Robin
# 3  
Old 09-11-2017
Hi Robin,

Earlier we were getting this report in the Windows server and we had developed the VBS(VB Script) to perform the same.

Now it's coming to Linux System, so we have to start it from scratch.

I didn't started writing any code till now.

But as per my analysis "insert_job" is the 1st line for each attempt which is a catch here and if I can get the data from 1st "insert_job" to before the next insert_job then can grep each of them as per their 1st part of the line and get the 2nd part by using awk and then echo them to one single line.


Thanks & Regards,
Pradeep Agarwal
# 4  
Old 09-11-2017
Code:
awk '
/:.*:/ {job=$2; jobs[$2]=$2; job_type=$3; sub(" *: *", "", job_type); cols[job_type]=job_type; data[job, job_type]=$NF; next}
/:/ {match($0, " *: *"); col=substr($0, 1, RSTART-1); val=substr($0, RSTART + RLENGTH); cols[col]=col; data[job, col]=val}
END {
   printf "JOB_NAME;JOB_TYPE;";
   for (j in cols) if (j !~ /^job_type$/) printf cols[j] ";";
   print "";
   for (i in jobs) {
      printf i ";" data[i, "job_type"] ";";
      for (j in cols) {
         if (j !~ /^job_type$/) printf (length(data[i, j]) ? data[i, j] : " ") ";";
      }
      print "";
   }
}
' infile

# 5  
Old 09-12-2017
A flexible Perl program.

Save as formatter.pl, run as perl formatter.pl [file1 file2 ...]
Code:
#!/usr/bin/perl

use strict;
use warnings;

#
# An ordered list of item labels.
my @ordered_labels = (
   'insert_job',
   'job_type',
   'box_name',
   'command',
   'machine',
   'owner',
   'permission',
   'date_conditions',
   'std_out_file',
   'std_err_file',
   'alarm_if_fail',
   'group',
   'application',
   'send_notification',
   'notification_msg',
   'notification_emailaddress',);
#
# Buffer db for all values on each group.
my %db;

display_header();

#
# Parse and collect values.
while(<>) {
    #
    # Inside a group
    if(/^insert_job/../^\n/){
        if(/^insert_job/) {
            #
            # First line has two pairs and value does not have
            # spaces
            while(/(\w+):\s(\w+)/g) {
                $db{$1} = $2;
            }
        }
        else {
            #
            # Parse only one pair that may contain all kind
            # of characters as value, including spaces and quotes.
            /(\w+):\s(.*$)/ and $db{$1} = $2;
        }
        #
        # Display the data gathered and clear db for next time.
        if(/^\n/) {
            display_body();
            %db = ();
        }
    }
}
# Display any data still in the db buffer.
display_body() if %db;

sub display_header {
    print "JOB_NAME;JOB_TYPE;";
    for(@ordered_labels[2..$#ordered_labels]) {
        print "$_;";
    }
    print "\n";
}

sub display_body {
    for my $i (@ordered_labels) {
        if (defined $db{$i}){
            $db{$i} =~ s/"//g;
            print "$db{$i};";
        }
        else {
            print " ;";
        }
    }
    print "\n";
}

Output:
Code:
$ perl formatter.pl raw_file

JOB_NAME;JOB_TYPE;box_name;command;machine;owner;permission;date_conditions;std_out_file;std_err_file;alarm_if_fail;group;application;send_notification;notification_msg;notification_emailaddress;
test_job_hu;CMD; ;sleep 600;localhost;account;gx,wx;0;/tmp/$AUTO_JOB_NAME.out;/tmp/$AUTO_JOB_NAME.err;1;P2;TBS_00_AXZCDE_Admin;1;test_job_hu job completed in HU NP;pradeep.agarwal@in.com;
test_machine;CMD;test_machine_box;echo $HOME;HULNXMACHINE;svc_account@hu.europe.com;gx,wx;0; ; ;1; ; ; ; ; ;

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Awking custom output

i have data that can look like this: echo "Master_Item_Service_is_down=0_njava_lang_NoClassDefFoundError=0_njava_lang_OutOfMemoryError=1_nemxCommonAppInitialization__Error_while_initializing=0_nINFO__Stopping_Coyote_HTTP_1_1_on_http_8080=7_nThe_file_or_directory_is_corrupted_and_unreadable=0_n" ... (7 Replies)
Discussion started by: SkySmart
7 Replies

2. Shell Programming and Scripting

Custom Shell

I have a jump off server, which grants SSH access to a few other servers. I would like to create a custom shell which can be assigned to specific user accounts which runs a menu script upon login, where they can select which server they want to jump too, however should they hit ctrl-c or any... (1 Reply)
Discussion started by: JayC89
1 Replies

3. AIX

NPIV custom WWN

Hi All :) i would like to know if i can customize the WWN of the new VFC (NPIV). Or, if i must move the LPAR on another server with another FCS, i have to change the zoning?? Thanks in advance. Mario ---------- Post updated 09-21-12 at 02:51 AM ---------- Previous update was 09-20-12 at... (1 Reply)
Discussion started by: Zio Bill
1 Replies

4. Shell Programming and Scripting

custom command

hi I am trying to make my own commands in my linux.I thought a command for changing directories will be easy. I made a simple file amd made the entries #!/bin/bash cd /opt/mydir I then made the file executable and then moved it to /usr/bin. But when i type the script name nothing... (2 Replies)
Discussion started by: born
2 Replies

5. Shell Programming and Scripting

doing own custom parameters

I have an rsync command that I want to create a variable where user can change to customize the parameters. complete rsync command to run: $RSYNC -e 'ssh -ax -o ClearAllForwardings=yes' --log-file=$LOG_FILE --delete -avzcr -u --update $SRC_DIR $USER@$TRG_SRV:$TRG_DIR >> $LOG_FILE What I... (4 Replies)
Discussion started by: abubin
4 Replies

6. AIX

Custom libraries possible on AIX 4.2 ?

I had started writting my own custom libraries on an AIX 4.2. Before finishing, I wanted to do a very simple test. So I wrote the followings: test.sh #!/bin/ksh . testlib.sh ZZ=testz "aa" "bb" echo "$ZZ" exit 0 testlib.sh testz () { return "$1$2" } When I ran my test.sh, I got an... (2 Replies)
Discussion started by: Browser_ice
2 Replies

7. UNIX for Dummies Questions & Answers

Changing ip in a custom way

Hi. I hope someone can help me. I have e very special question. I have a Lunix server and I have installed Webmin on it. This way, I can create a login for an other user and give him restricted access to some custom commands I set up. One of the commands i would like to setup, is for him to... (9 Replies)
Discussion started by: Wonderke
9 Replies

8. Shell Programming and Scripting

Custom auto-complete

Hello: I am using csh, and am a complete noob when it comes to shell scripting. I want the following: 1) Ignore case when doing auto-complete. 2) If there are multiple matches (example: I have files abc.txt abc.txt.1, abc.txt.2 and type abc<tab>), count the number of matches. If... (1 Reply)
Discussion started by: madiyaan
1 Replies

9. Shell Programming and Scripting

Custom PS command

(0 Replies)
Discussion started by: goldfish
0 Replies

10. UNIX for Dummies Questions & Answers

How to custom application name in `ps -ef`?

A program named /usr/bin/aa.sh, two parameters: 11, 22. after start it, the row in `ps -ef` is almost like the following: root 12198 10278 0.0 Nov 25 pts/3 0:00.23 /usr/bin/aa.sh 11 22 but I want to change "/usr/bin/aa.sh 11 22" to one rule string, such as: "AA_11_22", how to... (1 Reply)
Discussion started by: linkjack
1 Replies
Login or Register to Ask a Question