簡體   English   中英

我們可以在另一個awk命令中運行awk / sed命令嗎?

[英]Can we run awk/sed commands in another awk command?

我有以下字符串:

 <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">標記中的值進行匹配。 注意,每行有一對 我可以為$tag使用另一個awk嗎? 我想解析所有行並將值存儲在<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不熟悉。 有沒有建議的方法來執行此復雜的(對我而言)過濾和替換過程?

謝謝!

絕對不建議從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>

當數據除問題行外沒有雙引號時,可以使用sed:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM