我正在搜索正則表達式的任何匹配之前的行,並且 將輸出放入數組變量中,因此我們可以使用正則表達式匹配行遍歷 另一個數組。通過這種方式,我們知道 需要在每行的 末端將其打印出來時的內容。Bash Array; Sed AWK
<context name="Security" category="security" type="generic" optimizeSize="1">
<field name="BID_ASK_LASK_PRICE" type="double" id="0xFBCB" sequence="1" defaultValue="!null"/>
<field name="PX_OPEN_ALL_WITH_SWITCHOVER_RT" type="double" id="0x79F5" sequence="1" defaultValue="!null"/>
<field name="PX_CLOSE_ALL_WITH_SWITCHOVER_RT" type="double" id="0x79F6" sequence="1" defaultValue="!null"/>
<field name="PX_HIGH_ALL_WITH_SWITCHOVER_RT" type="double" id="0x79F7" sequence="1"
希望輸出會出現字段名稱| ID |上下文。在示例
CURRENT_SESSION_RT|0xFBCB|Security
PX_OPEN_ALL_WITH_SWITCHOVER_RT|0x79F5|Security
當前邏輯如下
#!/bin/bash
array=($(sed -n '/field name/{g;1!p;};h' $1))
array2=($(sed -n '/field name/p' $1))
for ((i=0;i<${#array[@]};++i)); do
ref=$(printf "${array2[1]}|" | sed 's/\"//g' | awk -F "=" '{print $2}')
name=$(printf "${array2[2]}|" | sed 's/[\"\>]//g' | awk -F "=" '{print $2}')
id=$(printf "${array[i]}\n" | sed 's/\"//g' | awk -F "=" '{print $2}')
printf "${ref}${name}${id}\n"
done
看起來是不迭代和附加適當作爲輸出只是重複以下
BID_ASK_LAST_PRICE|double|
BID_ASK_LAST_PRICE|double|"Security"
BID_ASK_LAST_PRICE|double|"security"
BID_ASK_LAST_PRICE|double|"generic"
BID_ASK_LAST_PRICE|double|"1">
BID_ASK_LAST_PRICE|double|
BID_ASK_LAST_PRICE|double|"Security"
BID_ASK_LAST_PRICE|double|"security"
BID_ASK_LAST_PRICE|double|"generic"
BID_ASK_LAST_PRICE|double|"1">
如何獲得所需的輸出輸出?關於字段之間的關係的規範將是有用的 – nu11p01n73R 2014-10-30 16:36:21
我曾經運行下面的一個班輪,以獲得字段名稱和ID由「|」分隔。我現在正在尋找添加'上下文名稱'grep'字段名稱=「。* id =」'file.name | sed -e's /.* field name =「//'-e's /".* id =」/ | /'-e's /".*//'| grep -v「[ - ] 1 $」 – 2014-10-30 16:39:38
@shelter我不確定你在暗示什麼?我只是在尋求幫助。與大多數「卡住」或不是專家的人沒有什麼不同。你的建議是看看其他地方沒有幫助的地方。 – 2014-10-30 16:56:56