我想从输入中得到预期的输出。
我编写了下面的程序来获得预期的输出,我几乎得到了输出,但我在这里面临的唯一问题是逗号的位置。该程序在输出中随机插入逗号。帮我改正吧。
输入:
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
节目:
#!/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
获取输出:(逗号定位不正确)
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,
预期输出:
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
这看起来您想要将整个事情重构为 Awk 脚本。
awk '/^Consumed Contracts *:/ { cc=1; consumed = $0;
sub(/^Consumed Contracts *: */, "", consumed); next }
/^Provided Contracts *:/ { print consumed; cc = 0 }
cc { sub(/^ */, ""); consumed = consumed $0 }
END { if (cc) print consumed }'