Como primeiro projeto para aprender awk , eu queria reformatar a saída do comando wmctrl , que pode ser instalado assim no Debian 11:
sudo apt install wmctrl
Para listar informações sobre todas as janelas que abri, executo este comando:
wmctrl -lpG
Saída de amostra:
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
Eu nunca consigo lembrar o que cada coluna significa, no comando acima, então eu queria separá-la em pares nome/valor, usando 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}'
Saída de amostra:
----------------------
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
Saída Desejada:
----------------------
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
No entanto, estou tendo problemas para descobrir como lidar com a 9ª coluna gerada por wmctrl -lpG
(porque a 9ª coluna contém espaços). Observe que estou recebendo apenas a primeira palavra do título da janela em vez de todo o título da janela .
Existe uma maneira fácil de resolver esse problema?
Resultado:
Parece que a saída
wmctrl
é de campos de largura fixa para que você possa usar o GNU awk paraFIELDWIDTHS
. Usandocat file
desde que não tenhowmctrl
e mantendo sua declaração de impressão original:Alternativamente, usando qualquer awk:
Esta é uma possibilidade: