2017-04-04 98 views
-2

我獲得了該文件:提取2組使用grep或awk的

<DEALER_ID>1234</DEALER_ID><CODE>O_777</CODE> 
<DEALER_ID>7532</DEALER_ID><CODE>O_991</CODE> 

,我想這樣的輸出:

1234 O_777 
7532 O_991 

這是據我已經得到了:

cat deal | sed 's/<\/DEALER_NAME>/<\/DEALER_NAME>\n/g' | grep -Po "<DEALER_ID>.*</CODE>" | grep -Po "\d*" 

只是第一列

+2

考慮使用XML解析器 – anubhava

+1

不要使用'awk'爲'XML'解析 – Inian

+0

請聽上面的意見,如果你不能在你的服務器沒有xml解析器的情況下,那麼'sed -r'/^[^>] +>([^ <]+).*>([^ <] +)。*/\ 1 \ 2 /'' –

回答

1

試試這個 -

awk -F'[<>]' '{print $3, $(NF-2)}' f 
1234 O_777 
7532 O_991 
2

在awk中:

$ awk 'gsub(/<[^>]*>/," ")&&$1=$1' file 
1234 O_777 
7532 O_991 

解釋:

gsub(/<[^>]*>/," ") # replace <.*> with a space 
&&     # and 
$1=$1    # rebuild the record to remove excess space 
        # implicit output. won't print lines without <.*> 
+0

在投票時,通常會發表評論。 –