I want to get the expected output from the input.
I have written below program to get the expected output and I almost got the output but the only problem i’m facing here is the placement of comma. The program is randomly inserting comma in the output. Help me to correct it.
input:
Tenant : PROD
Application : PROD_ANP
AEPg : EPG_VL-408
BD : BD-VL-408
uSeg EPG : no
Intra EPG Isolation : unenforced
Proxy ARP : none
Policy Tag : 49165
Vlan Domains : PROD_PhysDom
Consumed Contracts : Cont_EPG_VL-408_EPG_VL-491,Cont_EPG_VL-408_EPG_VL-450,Cont_
EPG_VL-408_EPG_VL-492,Cont_EPG_VL-408_EPG_VL-446,Cont_EPG_VL
-408_EPG_VL-471,Cont_EXT_EPG,Cont_EPG_VL-408_EPG_VL-443,Cont
_EPG_VL-408_EPG_VL-454,Cont_EPG_VL-408_EPG_VL-449,Cont_EPG_V
L-408_EPG_VL-445,Cont_EPG_VL-408_EPG_VL-444,Cont_EPG_VL-408_
EPG_VL-452,Cont_EPG_VL-408_EPG_VL-451,Cont_EPG_VL-408_EPG_VL
-447,Cont_EPG_VL-408_EPG_VL-448,Cont_EPG_VL-408_EPG_VL-441,C
ont_EPG_VL-408_EPG_VL-442
Provided Contracts : Cont_EPG_VL-408_EPG_VL-491,Cont_EPG_VL-408_EPG_VL-450,Cont_
EPG_VL-408_EPG_VL-492,Cont_EPG_VL-408_EPG_VL-446,Cont_EPG_VL
-408_EPG_VL-471,Cont_EXT_EPG,Cont_EPG_VL-408_EPG_VL-454,Cont
_EPG_VL-408_EPG_VL-441,Cont_EPG_VL-408_EPG_VL-447,Cont_EPG_V
L-408_EPG_VL-445,Cont_EPG_VL-408_EPG_VL-444,Cont_EPG_VL-408_
EPG_VL-452,Cont_EPG_VL-408_EPG_VL-451,Cont_EPG_VL-408_EPG_VL
-443,Cont_EPG_VL-408_EPG_VL-448,Cont_EPG_VL-408_EPG_VL-449,C
ont_EPG_VL-408_EPG_VL-442
Tenant : PROD
Application : PROD_ANP
AEPg : EPG_VL-409
BD : BD-VL-409
uSeg EPG : no
Intra EPG Isolation : unenforced
Proxy ARP : none
Policy Tag : 49165
Vlan Domains : PROD1_PhysDom
Consumed Contracts : Cont_EPG_VL-499_EPG_VL-491,Cont_EPG_VL-499_EPG_VL-450,Cont_
EPG_VL-499_EPG_VL-492,Cont_EPG_VL-499_EPG_VL-446,Cont_EPG_VL
-499_EPG_VL-471,Cont_EXT_EPG,Cont_EPG_VL-499_EPG_VL-443,Cont
_EPG_VL-499_EPG_VL-454,Cont_EPG_VL-499_EPG_VL-449,Cont_EPG_V
L-499_EPG_VL-445,Cont_EPG_VL-499_EPG_VL-444,Cont_EPG_VL-499_
EPG_VL-452,Cont_EPG_VL-499_EPG_VL-451,Cont_EPG_VL-499_EPG_VL
-447,Cont_EPG_VL-499_EPG_VL-448,Cont_EPG_VL-499_EPG_VL-441,C
ont_EPG_VL-499_EPG_VL-442
Provided Contracts : Cont_EPG_VL-408_EPG_VL-491,Cont_EPG_VL-408_EPG_VL-450,Cont_
EPG_VL-408_EPG_VL-492,Cont_EPG_VL-408_EPG_VL-446,Cont_EPG_VL
-408_EPG_VL-471,Cont_EXT_EPG,Cont_EPG_VL-408_EPG_VL-454,Cont
_EPG_VL-408_EPG_VL-441,Cont_EPG_VL-408_EPG_VL-447,Cont_EPG_V
L-408_EPG_VL-445,Cont_EPG_VL-408_EPG_VL-444,Cont_EPG_VL-408_
EPG_VL-452,Cont_EPG_VL-408_EPG_VL-451,Cont_EPG_VL-408_EPG_VL
-443,Cont_EPG_VL-408_EPG_VL-448,Cont_EPG_VL-408_EPG_VL-449,C
ont_EPG_VL-408_EPG_VL-442
Program:
#!/bin/bash
# Initialize variables to hold the values
current_consumed_contracts=""
# Function to print the current values
print_values() {
echo "$current_consumed_contracts"
}
# Read input line by line
while IFS= read -r line; do
# If the line starts with "Consumed Contracts", extract and format the value
if [[ "$line" == "Consumed Contracts"* ]]; then
# Extract the consumed contracts value
current_consumed_contracts=$(echo "$line" | cut -d ':' -f 2 | tr -d '[:space:]')
# Read the next line and append it to consumed contracts until it starts with another field
while IFS= read -r next_line && [[ ! "$next_line" =~ ^[A-Za-z].* ]]; do
# Concatenate the values with a comma and without space
current_consumed_contracts+="$(echo "$next_line" | tr -d '[:space:]'),"
done
# If the line starts with any other field, print the consumed contracts and reset the value
elif [[ "$line" =~ ^[A-Za-z].* ]]; then
if [ -n "$current_consumed_contracts" ]; then
print_values
current_consumed_contracts=""
fi
fi
done < input.txt
# Print the final consumed contracts value
if [ -n "$current_consumed_contracts" ]; then
print_values
fi
getting output: (comma positioning is incorrect)
Cont_EPG_VL-408_EPG_VL-491,Cont_EPG_VL-408_EPG_VL-450,Cont_EPG_VL-408_EPG_VL-492,Cont_EPG_VL-408_EPG_VL-446,Cont_EPG_VL,-408_EPG_VL-471,Cont_EXT_EPG,Cont_EPG_VL-408_EPG_VL-443,Cont,_EPG_VL-408_EPG_VL-454,Cont_EPG_VL-408_EPG_VL-449,Cont_EPG_V,L-408_EPG_VL-445,Cont_EPG_VL-408_EPG_VL-444,Cont_EPG_VL-408_,EPG_VL-452,Cont_EPG_VL-408_EPG_VL-451,Cont_EPG_VL-408_EPG_VL,-447,Cont_EPG_VL-408_EPG_VL-448,Cont_EPG_VL-408_EPG_VL-441,C,ont_EPG_VL-408_EPG_VL-442,
Cont_EPG_VL-499_EPG_VL-491,Cont_EPG_VL-499_EPG_VL-450,Cont_EPG_VL-499_EPG_VL-492,Cont_EPG_VL-499_EPG_VL-446,Cont_EPG_VL,-499_EPG_VL-471,Cont_EXT_EPG,Cont_EPG_VL-499_EPG_VL-443,Cont,_EPG_VL-499_EPG_VL-454,Cont_EPG_VL-499_EPG_VL-449,Cont_EPG_V,L-499_EPG_VL-445,Cont_EPG_VL-499_EPG_VL-444,Cont_EPG_VL-499_,EPG_VL-452,Cont_EPG_VL-499_EPG_VL-451,Cont_EPG_VL-499_EPG_VL,-447,Cont_EPG_VL-499_EPG_VL-448,Cont_EPG_VL-499_EPG_VL-441,C,ont_EPG_VL-499_EPG_VL-442,
expected output:
Cont_EPG_VL-408_EPG_VL-491,Cont_EPG_VL-408_EPG_VL-450,Cont_EPG_VL-408_EPG_VL-492,Cont_EPG_VL-408_EPG_VL-446,Cont_EPG_VL-408_EPG_VL-471,Cont_EXT_EPG,Cont_EPG_VL-408_EPG_VL-443,Cont_EPG_VL-408_EPG_VL-454,Cont_EPG_VL-408_EPG_VL-449,Cont_EPG_VL-408_EPG_VL-445,Cont_EPG_VL-408_EPG_VL-444,Cont_EPG_VL-408_EPG_VL-452,Cont_EPG_VL-408_EPG_VL-451,Cont_EPG_VL-408_EPG_VL-447,Cont_EPG_VL-408_EPG_VL-448,Cont_EPG_VL-408_EPG_VL-441,Cont_EPG_VL-408_EPG_VL-442
Cont_EPG_VL-499_EPG_VL-491,Cont_EPG_VL-499_EPG_VL-450,Cont_EPG_VL-499_EPG_VL-492,Cont_EPG_VL-499_EPG_VL-446,Cont_EPG_VL-499_EPG_VL-471,Cont_EXT_EPG,Cont_EPG_VL-499_EPG_VL-443,Cont_EPG_VL-499_EPG_VL-454,Cont_EPG_VL-499_EPG_VL-449,Cont_EPG_VL-499_EPG_VL-445,Cont_EPG_VL-499_EPG_VL-444,Cont_EPG_VL-499_EPG_VL-452,Cont_EPG_VL-499_EPG_VL-451,Cont_EPG_VL-499_EPG_VL-447,Cont_EPG_VL-499_EPG_VL-448,Cont_EPG_VL-499_EPG_VL-441,Cont_EPG_VL-499_EPG_VL-442