Awk [RESOLVIDO]

1. Awk [RESOLVIDO]

Talisson Alves de Paula
talisson205

(usa Linux Mint)

Enviado em 04/01/2021 - 18:33h

Olá, como vai?

Recentemente resolvi adicionar uma barra de estatus ao OpenBox no Raspbian. Em primeiro instante o Polybar me pareceu uma boa opção, mas perdi o interresse logo após perceber o espaço utilizado pelo programa após instalação (não me julgue). Além do mais, a proposta do Lemonbar me era perfeita.
Agora vamos aos "pormaiores". Escrevendo o script que formata a barra, "empaquei" em uma saída inesperada, gerada pelo awk.
Eis um trecho do código:

#! /usr/bin/env bash

color0="#FFD573"

workspaces="$(wmctrl -d | awk -v fg="$color0" \ '{
if ($2 == "-")
printf " %{F"fg"}" $NF "%{F-} "
else if ($2 == "*")
printf " " $NF " "
}')"

printf "%s\\n" "$workspaces"

Notas:
Creio que seria grosseiro da minha parte tentar explicar o que ele deveria fazer. Mas o intuito é identificar e formatar os caracteres que representam as áreas de trabalho.

Sei que a sintaxe não está "padrão" mas em primeiro instante, escrevi dessa forma para tentar evitar erros (...Fica parecido com Python).

Saída do wmctrl -d:
0 * DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 I
1 - DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 II
2 - DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 III
...

Saída do Script no terminal:

$ ./bar.sh | lemonbar -p
> awk time error: not enoung arguments passed to printf(" %{F#FFD573}II%{F-} ")
FILENAME="-" FNR=2 NR=2


Eis o problema: a excessão. Não compreendo o que está acontecendo nesse caso e gostaria de ajuda.

Obtive o resultado desejado alterando "printf" por "print" e formatando o valor da variável com o sed, mas até mesmo eu sei que é uma "gambiarra"...


  


2. Re: Awk [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 04/01/2021 - 22:18h

talisson205 escreveu:

Olá, como vai?

Recentemente resolvi adicionar uma barra de estatus ao OpenBox no Raspbian. Em primeiro instante o Polybar me pareceu uma boa opção, mas perdi o interresse logo após perceber o espaço utilizado pelo programa após instalação (não me julgue). Além do mais, a proposta do Lemonbar me era perfeita.
Agora vamos aos "pormaiores". Escrevendo o script que formata a barra, "empaquei" em uma saída inesperada, gerada pelo awk.
Eis um trecho do código:

#! /usr/bin/env bash

color0="#FFD573"

workspaces="$(wmctrl -d | awk -v fg="$color0" \ '{
if ($2 == "-")
printf " %{F"fg"}" $NF "%{F-} "
else if ($2 == "*")
printf " " $NF " "
}')"

printf "%s\\n" "$workspaces"

Notas:
Creio que seria grosseiro da minha parte tentar explicar o que ele deveria fazer. Mas o intuito é identificar e formatar os caracteres que representam as áreas de trabalho.

Sei que a sintaxe não está "padrão" mas em primeiro instante, escrevi dessa forma para tentar evitar erros (...Fica parecido com Python).

Saída do wmctrl -d:
0 * DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 I
1 - DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 II
2 - DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 III
...

Saída do Script no terminal:

$ ./bar.sh | lemonbar -p
> awk time error: not enoung arguments passed to printf(" %{F#FFD573}II%{F-} ")
FILENAME="-" FNR=2 NR=2


Eis o problema: a excessão. Não compreendo o que está acontecendo nesse caso e gostaria de ajuda.

Obtive o resultado desejado alterando "printf" por "print" e formatando o valor da variável com o sed, mas até mesmo eu sei que é uma "gambiarra"...

No printf o 1o argumento é a string de formatação e os parâmetros seguintes são os argumentos a serem substituídos. Então
printf "%s %s", $color0, $color0



3. Re: Awk [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/01/2021 - 22:55h


talisson205 escreveu:

Olá, como vai?

Recentemente resolvi adicionar uma barra de estatus ao OpenBox no Raspbian. Em primeiro instante o Polybar me pareceu uma boa opção, mas perdi o interresse logo após perceber o espaço utilizado pelo programa após instalação (não me julgue). Além do mais, a proposta do Lemonbar me era perfeita.
Agora vamos aos "pormaiores". Escrevendo o script que formata a barra, "empaquei" em uma saída inesperada, gerada pelo awk.
Eis um trecho do código:

#! /usr/bin/env bash

color0="#FFD573"

workspaces="$(wmctrl -d | awk -v fg="$color0" \ '{
if ($2 == "-")
printf " %{F"fg"}" $NF "%{F-} "
else if ($2 == "*")
printf " " $NF " "
}')"

printf "%s\\n" "$workspaces"

Notas:
Creio que seria grosseiro da minha parte tentar explicar o que ele deveria fazer.
Mas o intuito é identificar e formatar os caracteres que representam as áreas de trabalho.

Sei que a sintaxe não está "padrão" mas em primeiro instante, escrevi dessa forma para tentar evitar erros (...Fica parecido com Python).

Saída do wmctrl -d:
0 * DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 I
1 - DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 II
2 - DG: 1366x768 VP: 0,0 WA: 0,0 1366x768 III
...

Saída do Script no terminal:

$ ./bar.sh | lemonbar -p
> awk time error: not enoung arguments passed to printf(" %{F#FFD573}II%{F-} ")
FILENAME="-" FNR=2 NR=2


Eis o problema: a excessão. Não compreendo o que está acontecendo nesse caso e gostaria de ajuda.

Obtive o resultado desejado alterando "printf" por "print" e formatando o valor da variável com o sed, mas até mesmo eu sei que é uma "gambiarra"...

Boa noite Talisson.
Não entendi qual a formatação da saída que voce quer....
segue exemplo:
wmctrl -d|awk '{if($2=="-") printf "\" %%F{#FFD573} %02d %%{F-} \"\n" ,$NF;else printf "\" %02d \"\n" ,$NF}'
" 01 "
" %F{#FFD573} 02 %{F-} "
" %F{#FFD573} 03 %{F-} "
" %F{#FFD573} 04 %{F-} "




______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
______________________________________________________________________



4. Re: Awk [RESOLVIDO]

Talisson Alves de Paula
talisson205

(usa Linux Mint)

Enviado em 05/01/2021 - 02:16h

[quote]msoliver escreveu:
Boa noite Talisson.
Não entendi qual a formatação da saída que voce quer....
segue exemplo:
wmctrl -d|awk '{if($2=="-") printf "\" %%F{#FFD573} %02d %%{F-} \"\n" ,$NF;else printf "\" %02d \"\n" ,$NF}'
" 01 "
" %F{#FFD573} 02 %{F-} "
" %F{#FFD573} 03 %{F-} "
" %F{#FFD573} 04 %{F-} "



Primeiramente obrigado pelo interesse. Segundo, essa não é exatamente a saída que preciso... Seria assim:
%{F#FFD573} I {F-}II III IV
*Supondo que esteja trabalhando na área "I"
* O valor da cor (em hexadecimal) precisa ser definido por uma variável já que o script da barra faz uso de uma paleta integrada a outros scripts.

Estou a algum tempo mechendo no seu código e vou dizer que apostei na simplicidade, o problema é que não pode haver quebras de linha... Ou seja: usar o "print" pode não ser o bastante.



5. Re: Awk [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 05/01/2021 - 19:30h


talisson205 escreveu:

[quote]msoliver escreveu:
Boa noite Talisson.
Não entendi qual a formatação da saída que voce quer....
segue exemplo:
wmctrl -d|awk '{if($2=="-") printf "\" %%F{#FFD573} %02d %%{F-} \"\n" ,$NF;else printf "\" %02d \"\n" ,$NF}'
" 01 "
" %F{#FFD573} 02 %{F-} "
" %F{#FFD573} 03 %{F-} "
" %F{#FFD573} 04 %{F-} "



Primeiramente obrigado pelo interesse. Segundo, essa não é exatamente a saída que preciso... Seria assim:
%{F#FFD573} I {F-}II III IV
*Supondo que esteja trabalhando na área "I"
* O valor da cor (em hexadecimal) precisa ser definido por uma variável já que o script da barra faz uso de uma paleta integrada a outros scripts.

Estou a algum tempo mechendo no seu código e vou dizer que apostei na simplicidade, o problema é que não pode haver quebras de linha... Ou seja: usar o "print" pode não ser o bastante.

Boa noite Talisson.
Qto a quebra de linha, é só tirar o "\n", o printf por padrão não quebra a linha.
Se a saída é a que postou, você inverteu o condicional do seu comando inicial.....
Veja:
color0="#FFD573"
workspaces="$(wmctrl -d | awk -v fg="$color0" \ '{
if ($2 == "-") printf " %{F"fg"}" $NF "%{F-} "
else if ($2 == "*")
printf " " $NF " "
}')"
Não inclui a cor no awk, para o comando ficar mais limpo..... É só colocar.....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________





6. Finalmente...

Talisson Alves de Paula
talisson205

(usa Linux Mint)

Enviado em 06/01/2021 - 14:20h

Além da ajuda de vocês aqui do fórum precisei ler um pouco mais sobre formatações com o printf. Eis o resultado final:

workspaces="$(wmctrl -d | awk '{
if($2=="*") printf " %s%s%s ", "%{F#569184}",$NF,"%{F-}";else printf " %s ", $NF}')"

printf "%s\\n" "$workspaces"


* Realmente utilizar a variável "fg" estava causando todos os meus problemas. Pena que até o momento tenho que alterar o valor RGB sempre que troco a paleta. Diferente do restante do código.

Obrigado. E valeu...






7. Re: Awk [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 06/01/2021 - 15:03h


talisson205 escreveu:

Além da ajuda de vocês aqui do fórum precisei ler um pouco mais sobre formatações com o printf. Eis o resultado final:

workspaces="$(wmctrl -d | awk '{
if($2=="*") printf " %s%s%s ", "%{F#569184}",$NF,"%{F-}";else printf " %s ", $NF}')"

printf "%s\\n" "$workspaces"


* Realmente utilizar a variável "fg" estava causando todos os meus problemas.
Pena que até o momento tenho que alterar o valor RGB sempre que troco a paleta. Diferente do restante do código.

Obrigado. E valeu...

Boa tarde Talisson, dá para usar a var "fg", segue:
cor="#FFD573";wmctrl -d| awk -v fg="$cor" '{if($2~/\*/) printf "%%{F%s} %s %%{F-}" ,fg,$NF;else printf "%s " ,$NF}' 


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________