Extract multiple values into corresponding variables


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Extract multiple values into corresponding variables
# 1  
Old 04-06-2017
Extract multiple values into corresponding variables

Here is my input
Code:
# MANIFEST.MF
Manifest-Version: 1.0
Build-Jdk: 1.6.0
Built-By: CM_TEAM
Build_SvnRev: 662789
Build_Number: 13.0.0.0-JDK8
Build_Date: Wed 04/05/2017-20:48:19.17
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.1.0

Here is the expected output:
Code:
13.0.0.0-JDK8,04/05/2017-20:48:19.17,662789

Here the code I have to get above output.

Code:
out=$(cat MANIFEST.MF | tr -d '\r' | grep '^Build_'); 
BN=$(echo "$out" | grep Build_Number| awk '{print $NF}'); 
BS=$(echo "$out" | grep Build_SvnRev | awk '{print $NF}');
BD=$(echo "$out" | grep Build_Date | awk '{print $NF}');  
echo "$BN,$BD,$BS"

Is there a way that we can do this efficiently without having to repeat grep/awk multiple times? may be perl/awk can do that?
# 2  
Old 04-06-2017
Hi, try:

Code:
awk '{A[$1]=$NF} END{print A["Build_SvnRev:"], A["Build_Number:"], A["Build_Date:"]}' OFS=, file

--
If there are CR (Windows) characters in the input file you could:
Code:
awk '{sub(/\r$/,x); A[$1]=$NF} END{print A["Build_SvnRev:"], A["Build_Number:"], A["Build_Date:"]}' OFS=, file


Last edited by Scrutinizer; 04-06-2017 at 04:57 PM..
This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 04-06-2017
That is awesome.. works great.
# 4  
Old 04-07-2017
You said you wanted to "Extract multiple values into corresponding variables". Depending on your shell, this might work:
Code:
IFS=, read BN BD BS <<< $(awk '{A[$1]=$NF} END{print A["Build_SvnRev:"], A["Build_Number:"], A["Build_Date:"]}' OFS=, file)
echo "$BN,$BD,$BS"
662789,13.0.0.0-JDK8,04/05/2017-20:48:19.17

This User Gave Thanks to RudiC For This Post:
# 5  
Old 04-07-2017
With shell builtins
Code:
while IFS=": " read key val
do
  val=${val%$'\r'}
  case $key in
  Build_Number) BN=$val;;
  Build_SvnRev) BS=$val;;
  Build_Date) BD=$val;;
  esac
done < file
echo "$BN,$BD,$BS"

The code to strip the DOS-CRs works in bash and zsh

Last edited by MadeInGermany; 04-07-2017 at 02:42 PM..
This User Gave Thanks to MadeInGermany For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Enhance existing script: Extract Multiple variables & Input in an echo string

Hi Experts I need your help to optimize my script to execute better as I have nearly 1M records & the script is taking close to 40 minutes to execute, so would need support on a faster alternative. Input: file {"house":"1024","zip":"2345","city":"asd","country":"zzv"}... (2 Replies)
Discussion started by: nk1984
2 Replies

2. Shell Programming and Scripting

awk to extract multiple values from file and add two additional fields

In the attached file I am trying to use awk to extract multiple values and create the tab-delimited desired output. In the output R_Index is a the sequential # and Pre_Enrichment is defaulted to .. I can extract from the values to the side of the keywords, but most are above and I can not... (2 Replies)
Discussion started by: cmccabe
2 Replies

3. UNIX for Dummies Questions & Answers

Read in Multiple log files and output selected variables and values to cvs file

I have several problems with my problems: I hope you can help me. 1) the If else statement I am getting an error message. My syntax must be incorrect because the entire statement is throwing an error. For example in filew.log if these items don't exist Memsize, SASFoundation and also if... (0 Replies)
Discussion started by: dellanicholson
0 Replies

4. Shell Programming and Scripting

Assigning multiple column's value from Oracle query to multiple variables in UNIX

Hi All, I need to read values of 10 columns from oracle query and assign the same to 10 unix variables. The query will return only one record(row). I tried to append all these columns using a delimiter(;) in the select query and assign the same to a single variable(V) in unix. I thought I... (3 Replies)
Discussion started by: hkrishnan91
3 Replies

5. Shell Programming and Scripting

Reading multiple values from multiple lines and columns and setting them to unique variables.

Hello, I would like to ask for help with csh script. An example of an input in .txt file is below, the number of lines varies from file to file and I have 2 or 3 columns with values. I would like to read all the values (probably one by one) and set them to independent unique variables that... (7 Replies)
Discussion started by: FMMOLA
7 Replies

6. Shell Programming and Scripting

Read record from the text file contain multiple separated values & assign those values to variables

I have a file containing multiple values, some of them are pipe separated which are to be read as separate values and some of them are single value all are these need to store in variables. I need to read this file which is an input to my script Config.txt file name, first path, second... (7 Replies)
Discussion started by: ketanraut
7 Replies

7. Shell Programming and Scripting

[Solved] Counting The Number of Lines Between Values with Multiple Variables

Hey everyone, I have a bunch of lines with values in field 4 that I am interested in. If these values are between 1 and 3 I want it to count all these values to all be counted together and then have the computer print out LOW and the number of lines with those values in between 1 and 3,... (2 Replies)
Discussion started by: VagabondGold
2 Replies

8. Shell Programming and Scripting

Running a script with multiple variables like 25 variables.

Hi All, i have a requirement where i have to run a script with at least 25 arguements and position of arguements can also change. the unapropriate way is like below. can we achieve this in more good and precise way?? #!/bin/ksh ##script is sample.ksh age=$1 gender=$2 class=$3 . . .... (3 Replies)
Discussion started by: Lakshman_Gupta
3 Replies

9. Shell Programming and Scripting

Extract multiple values from a tnsping output

Hi all, Can anyone help with the following request? I need to extract HOST value, SERVICE_NAME and msec value from a tnsping output and append to a file. The tnsping output is typically as follows: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS =... (4 Replies)
Discussion started by: jonnyd
4 Replies

10. Shell Programming and Scripting

Error in fetching multiple row values into variables

Hello Team, In the below code....The variabe values are not fetch from input table into SELECT statements. =========================== #!/usr/bash DATABASE=XXXXX inputFILE=$1 db2 connect to $DATABASE TABLENAME=`echo $inputFILE|awk '{print $1}'` COLUMNNAME=`echo $inputFILE|awk... (2 Replies)
Discussion started by: rocking77
2 Replies
Login or Register to Ask a Question