2015-10-13 137 views
1

我有以下字符串:我們可以在另一個awk命令中運行awk/sed命令嗎?

<T"4567">Dummy Data</Test> 
 
<T"0023"><Tag1>Dummy</Tag1></Test> 
 
>DummyData<T"0001"><Tag2>asdad</Tag2><Tag3>bla</Tag3><Tag4>Dummy Data</Tag4></Test> 
 
RandomString<T"0014">Dummy2 </Test>

我從一個大的文件過濾掉這串用下面的命令:

awk '{for(tag=1;tag<=NF;tag++){if($tag~/"...."/){print $tag}}}' Big_FILE 

<T"dddd">格式檢索所有行。

現在我想匹配所有結尾</Test>標籤與從開始<T"dddd">標籤的值。 請注意,我們每條線上都有一對。 我可以使用awk作爲$tag嗎?我想解析所有行並將值存儲在<T"">分隔符之間。對於每一行,我還希望使用此值用sed覆蓋配對的</Test>標記。

最後,它應該是這樣的:

<T4567>Dummy Data</T4567> 
 
<T0023><Tag1>Dummy</Tag1></T0023> 
 
>DummyData<T0001><Tag2>asdad</Tag2><Tag3>bla</Tag3><Tag4>Dummy Data</Tag4></T0001> 
 
RandomString<T0014>Dummy2 </T0014>

我想用這樣的:

awk '{for(tag=1;tag<=NF;tag++){if($tag~/"...."/) 
        {print $tag 
        awk -v '[<T" ">]' '{print $tag_new}' $tag 
        sed -i -e 's/</Test>/</T$tag_new>/g' $tag 
        sed -i -e 's/<T"/<T/g' $tag 
        sed -i -e 's/">/>/g' $tag 
        }}} 

但你可以看到我我不熟悉awksed。有沒有建議的方式來做這個複雜的(對我來說)過濾和替換過程?

謝謝!

回答

1

不鼓勵從awk或perl調用awk或sed或perl。

在這種情況下,你需要的是:

perl -pe 's{<T"(\d+)">(.*?)</Test>}{<T$1>$2</T$1>}g' file 

生產

<T4567>Dummy Data</T4567> 
<T0023><Tag1>Dummy</Tag1></T0023> 
>DummyData<T0001><Tag2>asdad</Tag2><Tag3>bla</Tag3><Tag4>Dummy Data</Tag4></T0001> 
RandomString<T0014>Dummy2 </T0014> 
+0

謝謝!非常有用的命令! – vldkrm

0

當數據不除問題線雙引號,你可以使用SED:

while IFS=\" read -r f1 f2 f3; do 
     echo "${f1}${f2}$(echo "${f3}" |sed 's#</Test>#</T'${f2}'>#')" 
done < Big_FILE 
相關問題