0

このようなテキストストリームがあり、そこ から次のような出力 が必要です 入力には多くの行があり、そのすべてが書き込み可能ではありません.
<device nid="05023CA70900" id="1" fblock="-1" type="switch" name="Appliance Home" brand="Google" active="false" energy_lo="427" />
<device nid="0501C1D82300" id="2" fblock="-1" type="switch" name="TELEVISION Home" brand="Google" active="pending" energy_lo="3272" />


05023CA70900@@1@@-1@@switch@@Appliance Home@@Google@@false@@427 0501C1D82300@@2@@-1@@switch@@TELEVISION Home@@Google@@pending@@3272

awk または sed を使用してこれをどのように達成できますか?

4

3 に答える 3

1

次の awk が機能するはずです。

awk -F '"' '$1 == "<device nid=" { printf("%s@@%s@@%s@@%s@@%s@@%s@@%s@@%s\n", 
                    $2, $4, $6, $8, $10, $12, $14, $16)}' file

PS: awk/sed を使用して XML を解析することが常に最善の方法であるとは限りません。

于 2013-07-16T09:57:48.003 に答える
0
awk -F\" -v OFS="@@" '/^<device nid=/ { print $2, $4, $6, $8, $10, $12, $14, $16 }' file

またはより一般的に:

awk -F\" '/^<device nid=/ {for (i=2;i<=NF;i+=2) printf "%s%s",(i==2?"":"@@"),$i; print ""}' file

コメントで質問に対処するには: の前にタブを配置できる場合<device nid:

awk -F\" '/^\t?<device nid=// ...'

他のことを意味する場合は、質問を更新して、より代表的な意見を提供してください。

于 2013-07-16T12:33:34.530 に答える