作为学习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
但是,我无法弄清楚如何处理由(因为第9wmctrl -lpG
列包含空格)输出的第 9 列。请注意,我只得到窗口标题的第一个单词,而不是整个窗口标题。
有没有简单的方法来解决这个问题?
输出:
看起来输出
wmctrl
是固定宽度字段,因此您可以将 GNU awk 用于FIELDWIDTHS
. 使用cat file
因为我没有wmctrl
并保留您的原始打印声明:或者,使用任何 awk:
这是一种可能: