AWK - wmctrl 出力の最後の列の空白を処理します。

AWK - wmctrl 出力の最後の列の空白を処理します。

最初の研究プロジェクトとしてアッ、出力を再フォーマットしたいです。コントロールパネルDebian 11 で次のようにインストールできるコマンドです。

sudo apt install wmctrl

開いているすべてのウィンドウに関する情報を一覧表示するには、次のコマンドを実行します。

wmctrl -lpG

出力例:

0x0120002b  4 7      2    157  3836 2068 my-pc window - AWK - Dealing with spaces in the last column of output from wmctrl - Unix & Linux Stack Exchange — Firefox

上記のコマンドでは各列の意味を覚えていないので、AWKを使用して名前と値のペアに分割したいと思います。

wmctrl -lpG | awk '{print "----------------------\nWindow ID: " $1 "\nDesktop Number: " $2 "\nProcess ID: " $3 "\nx-offset: " $4 "\ny-offset: " $5 "\nwidth: " $6 "\nheight: " $7 "\nMachine Name: " $8 "\nWindow Title: " $9}'

出力例:

----------------------
Window ID: 0x0120002b
Desktop Number: 4
Process ID: 7
x-offset: 2
y-offset: 134
width: 3836
height: 2068
Machine Name: my-pc
Window Title: window

希望の出力:

----------------------
Window ID: 0x0120002b
Desktop Number: 4
Process ID: 7
x-offset: 2
y-offset: 134
width: 3836
height: 2068
Machine Name: my-pc
Window Title: window - AWK - Dealing with spaces in the last column of output from wmctrl - Unix & Linux Stack Exchange — Firefox

しかし、どのように処理するのかわかりません。9番目の列出力wmctrl -lpG(列9にスペースが含まれているため)。私はただ得ます。最初の単語ウィンドウタイトルフルウィンドウタイトルの代わりに

この問題を解決する簡単な方法はありますか?

ベストアンサー1

wmctrl -lpG \
| awk '{
         tmp=$0;
         # remove first 8 fields from tmp
         sub(/^[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ /,"",tmp);
         print "----------------------\nWindow ID: " $1 "\nDesktop Number: " $2 "\nProcess ID: " $3 "\nx-offset: " $4 "\ny-offset: " $5 "\nwidth: " $6 "\nheight: " $7 "\nMachine Name: " $8 "\nWindow Title: " tmp
       }'

出力:

----------------------
Window ID: 0x0120002b
Desktop Number: 4
Process ID: 7
x-offset: 2
y-offset: 157
width: 3836
height: 2068
Machine Name: sidekick
Window Title: window - AWK - Dealing with spaces in the last column of output from wmctrl - Unix & Linux Stack Exchange — Firefox

おすすめ記事