AWK/SEDを使用して複数の文字列から単語を抽出する

AWK/SEDを使用して複数の文字列から単語を抽出する

Linuxでは、AWKコマンドを使用して複数行から単語を抽出しようとし、AWKとSEDを使用してさまざまな方法を試しましたが、結果がないロジックを探しています。

付属ここに画像の説明を入力してください。テキストファイルであり、予想される出力です。

答え1

使用XMLスター:

xmlstarlet sel -t -m '//APPLIANCE' -v 'concat(NAME/text()," ",STATUS/text())' -nl file.xml

与えられたデータに対して以下が生成される。

METASYNC Online
DELTA Offline

XML文書内のすべてのノードを見つけ、中間スペースを使用してAPPLIANCEその値と子ノードを連結することによってNAMEこれを行います。それぞれの結果を出力した後、末尾STATUSに改行文字を挿入します。-nlAPPLIANCE

列ヘッダーとより良い表形式が必要な場合:

( echo 'Device_name Status'
  xmlstarlet ...as above... ) | column -t

答え2

これを使って希望の出力を得ることができます

$ echo "DEVICE-NAME STATUS" ; grep -e NAME -e STATUS <filename> | sed 's#NAME##g ; s#STATUS##g ;  s#<>## ; s#</>##' | xargs -L2 | column -t

出力:

DEVICE-NAME STATUS
METASYNC Online
DELTA OFFLINE

関連情報