2017-04-04 92 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

在投票时,通常会发表评论。 –