[英]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
}}}
但是如您所見,我對awk
和sed
不熟悉。 有沒有建議的方法來執行此復雜的(對我而言)過濾和替換過程?
謝謝!
絕對不建議從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.