Sponsored Content
Full Discussion: A script need help
Top Forums Shell Programming and Scripting A script need help Post 303039407 by green_k on Thursday 3rd of October 2019 08:53:00 AM
Old 10-03-2019
Quote:
Originally Posted by Chubler_XL
And another awk approach:

Code:
awk -v want="VALUE1,VALUE2,VALUE3" -F'[=\\][]' '
function prnsection(i) {
   if(length(section)) {
     printf "%s",section;
     for(i=1;i in keypos;i++) {
       printf " %s", keys[keypos[i]]
       keys[keypos[i]]="MISSING"
     }
     printf "\n"
   }
}
BEGIN {
   for(i=split(want, keypos, ",");i;i--) {
       keys[keypos[i]]="MISSING";
   }
}
NF>2 { prnsection(); section=$0 }
$1 in keys { keys[$1]=$0 };
END { prnsection() }' infile

Hi Chubler_XL, thanks for your answer. it works fine. since I am relatively new for unix/awk scripting. I am not able to fully understand the code. below is my understanding about this code, some part I don't know how it works and have some questions. could you please review and give me brief explanation

thanks in advance.

Code:
awk -v want="RECORD_COUNT,VALUE2,VALUE3" -F'[=\\][]' '  --- F'[=\\][]' need to understand how the regular exp works.. 
function prnsection(i) {                                --- function pass arg i in
   if(length(section)) {                                --- if section is not empty do following
     printf "%s",section;                               --- print section
     for(i=1;i in keypos;i++) {                         --- for loop, max i is number of array keypos: keypos[value1]=1, keypos[value2]=2, keypos[values3]=3 
       printf " %s", keys[keypos[i]]                    --- array keys elements are: keys[1]=value1, keys[2]=value2, key[3]=value2 
       keys[keypos[i]]="MISSING"                        --- if array keys element doens't have value , assign value "missing"
     }                                                 
     printf "\n"
   }
}
BEGIN {
   for(i=split(want, keypos, ",");i;i--) {              --- create array keypos element based on variable want
       keys[keypos[i]]="MISSING";                       --- create array keys if keys is empty then assign value missing.
   }
}
NF>2 { prnsection(); section=$0 }                       ---if NF> 2  then call function and assign $0 to section. the function has one 
                                                                                    --- argument, but here is empty, 
														---how the value be passed in?	
														---what's the purpose to call this function?
$1 in keys { keys[$1]=$0 };                             --- first my understanding is $1 is VALUE1, VALUE2..., I tried command, with -F'[=\\][]' 
                                                                           ----as delimiter, NF=1, not sure how it works. 
END { prnsection() }' file                              ---here call the function to print result..

 

5 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

create a shell script that calls another script and and an awk script

Hi guys I have a shell script that executes sql statemets and sends the output to a file.the script takes in parameters executes sql and sends the result to an output file. #!/bin/sh echo " $2 $3 $4 $5 $6 $7 isql -w400 -U$2 -S$5 -P$3 << xxx use $4 go print"**Changes to the table... (0 Replies)
Discussion started by: magikminox
0 Replies

2. Shell Programming and Scripting

Script will keep checking running status of another script and also restart called script at night

I am using blow script :-- #!/bin/bash FIND=$(ps -elf | grep "snmp_trap.sh" | grep -v grep) #check snmp_trap.sh is running or not if then # echo "process found" exit 0; else echo "process not found" exec /home/Ketan_r /snmp_trap.sh 2>&1 & disown -h ... (1 Reply)
Discussion started by: ketanraut
1 Replies

3. UNIX for Dummies Questions & Answers

Calling a script from master script to get value from called script

I am trying to call a script(callingscript.sh) from a master script(masterscript.sh) to get string type value from calling script to master script. I have used scripts mentioned below. #masterscript.sh ./callingscript.sh echo $fileExist #callingscript.sh echo "The script is called"... (2 Replies)
Discussion started by: Raj Roy
2 Replies

4. Shell Programming and Scripting

Shell script works fine as a standalone script but not as part of a bigger script

Hello all, I am facing a weird issue while executing a code below - #!/bin/bash cd /wload/baot/home/baotasa0/sandboxes_finance/ext_ukba_bde/pset sh UKBA_publish.sh UKBA 28082015 3 if then echo "Param file conversion for all the areas are completed, please check in your home directory"... (2 Replies)
Discussion started by: ektubbe
2 Replies

5. Shell Programming and Scripting

How to block first bash script until second bash script script launches web server/site?

I'm new to utilities like socat and netcat and I'm not clear if they will do what I need. I have a "compileDeployStartWebServer.sh" script and a "StartBrowser.sh" script that are started by emacs/elisp at the same time in two different processes. I'm using Cygwin bash on Windows 10. My... (3 Replies)
Discussion started by: siegfried
3 Replies
DIFF(1) 						      General Commands Manual							   DIFF(1)

NAME
diff - differential file comparator SYNOPSIS
diff [ -efbh ] file1 file2 DESCRIPTION
Diff tells what lines must be changed in two files to bring them into agreement. If file1 (file2) is `-', the standard input is used. If file1 (file2) is a directory, then a file in that directory whose file-name is the same as the file-name of file2 (file1) is used. The normal output contains lines of these forms: n1 a n3,n4 n1,n2 d n3 n1,n2 c n3,n4 These lines resemble ed commands to convert file1 into file2. The numbers after the letters pertain to file2. In fact, by exchanging `a' for `d' and reading backward one may ascertain equally how to convert file2 into file1. As in ed, identical pairs where n1 = n2 or n3 = n4 are abbreviated as a single number. Following each of these lines come all the lines that are affected in the first file flagged by `<', then all the lines that are affected in the second file flagged by `>'. The -b option causes trailing blanks (spaces and tabs) to be ignored and other strings of blanks to compare equal. The -e option produces a script of a, c and d commands for the editor ed, which will recreate file2 from file1. The -f option produces a similar script, not useful with ed, in the opposite order. In connection with -e, the following shell program may help maintain multiple versions of a file. Only an ancestral file ($1) and a chain of version-to-version ed scripts ($2,$3,...) made by diff need be on hand. A `latest version' appears on the standard output. (shift; cat $*; echo '1,$p') | ed - $1 Except in rare circumstances, diff finds a smallest sufficient set of file differences. Option -h does a fast, half-hearted job. It works only when changed stretches are short and well separated, but does work on files of unlimited length. Options -e and -f are unavailable with -h. FILES
/tmp/d????? /usr/lib/diffh for -h SEE ALSO
cmp(1), comm(1), ed(1) DIAGNOSTICS
Exit status is 0 for no differences, 1 for some, 2 for trouble. BUGS
Editing scripts produced under the -e or -f option are naive about creating lines consisting of a single `.'. DIFF(1)
All times are GMT -4. The time now is 06:00 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy