我有下面的字串,每行由新行作為輸入字串分隔
string="name: MAIN_ROLE
description: ROLE DESCRIPTION
readOnly:
roleReferences:
- roleTemplateAppId: app1
roleTemplateName: template2
name: Name1
- roleTemplateAppId: app2
roleTemplateName: template2
name: Name2
"
我喜歡將 YAML 字串列印成逗號分隔的字串,如下所示。輸入字串在“-”之后可以有任意數量的組件,這會產生新記錄但 MAIN_ROLE 值保持相同的第一列:
MAIN_ROLE,Name1,template1,app1
MAIN_ROLE,Name2,template2,app2
我嘗試在下面的代碼中用“-”分割行,但我沒有得到正確的結果
echo "$a" | sed -n $'/^- $/,/^- $/p' <<< $string
uj5u.com熱心網友回復:
你可以這樣使用awk:
awk 'NR==1{a=$2;cnt=0} /^-/{rta[cnt]=$3;getline;rtn[cnt]=$2; getline; n[cnt]=$2;cnt } END{ for(i=0;i<cnt;i ) { print a","n[i]","rtn[i]","rta[i] } }' file > outputfile
請參閱在線演示:
#!/bin/bash
string="name: MAIN_ROLE
description: ROLE DESCRIPTION
readOnly:
roleReferences:
- roleTemplateAppId: app1
roleTemplateName: template1
name: Name1
- roleTemplateAppId: app2
roleTemplateName: template2
name: Name2
"
awk 'NR==1{ # When on Line 1
a=$2;cnt=0 # Set a (main name) and cnt (counter) vars
}
/^-/{ # When line starts with -
rta[cnt]=$3; getline; # Add role template app ID to rta array, read next line
rtn[cnt]=$2; getline; # Add role template name to rtn array, read next line
n[cnt]=$2;cnt # Add name to n array, increment the cnt variable
}
END{ # When the file processing is over
for(i=0;i<cnt;i ) { # Iterate over the found values and...
print a","n[i]","rtn[i]","rta[i] # print them
}
}' <<< "$string"
# => MAIN_ROLE,Name1,template1,app1
# MAIN_ROLE,Name2,template2,app2
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/331204.html
