quarta-feira, 15 de janeiro de 2025

O comando join


O comando join

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 12 de janeiro de 2025

 Fonte: https://www.dicas-l.com.br/

O comando join no  Linux é uma ferramenta poderosa para combinar linhas de dois arquivos com base em um campo comum. É particularmente útil quando você precisa mesclar dados de diferentes fontes.

A sintaxe básica do comando é:


$ join [OPÇÕES] ARQUIVO1 ARQUIVO2

O join funciona comparando os campos especificados em ambos os arquivos e, quando encontra uma correspondência, combina as linhas dos dois arquivos. Por padrão, ele usa o primeiro campo de cada arquivo como chave de junção.

É importante notar que, para o join funcionar corretamente, os arquivos devem estar ordenados pelo campo de junção. Vamos explorar alguns exemplos práticos para entender melhor como o join funciona.

Imagine que temos dois arquivos: funcionarios.txt e salarios.txt.

O arquivo funcionarios.txt contém:


1 João

2 Maria

3 Pedro

E o arquivo salarios.txt contém:


1 3500

2 4000

3 3800

Para juntar estes arquivos, usamos o comando:


$ join funcionarios.txt salarios.txt

O resultado será:


1 João 3500

2 Maria 4000

3 Pedro 3800

Agora, vamos considerar um cenário onde o campo de junção não é o primeiro. Temos um arquivo departamentos.txt:


RH 1 João

TI 2 Maria

MKT 3 Pedro

Para juntar este arquivo com salarios.txt, usamos:


$ join -1 2 -2 1 departamentos.txt salarios.txt

O resultado será:


1 RH João 3500

2 TI Maria 4000

3 MKT Pedro 3800

O join também permite incluir linhas que não têm correspondência. Imagine que temos um arquivo funcionarios_extra.txt:


1 João

2 Maria

3 Pedro

4 Ana

Para incluir todos os funcionários, mesmo os sem salário, usamos:


$ join -a 1 funcionarios_extra.txt salarios.txt

O resultado será:


1 Joãoo 3500

2 Maria 4000

3 Pedro 3800

4 Ana

Podemos também formatar a saí­da do join. Por exemplo:


$ join -o 1.2,2.2,1.1 funcionarios.txt salarios.txt

Isso resultará em:


João 3500 1

Maria 4000 2

Pedro 3800 3

O join também pode ignorar diferenças de maiúsculas e minúsculas. Se tivermos um arquivo nomes.txt:


1 JOÃO

2 MARIA

3 PEDRO

Podemos usar:


$ join -i nomes.txt salarios.txt

E o resultado será:


1 JOÃO 3500

2 MARIA 4000

3 PEDRO 3800



Algumas dicas adicionais: se os arquivos não estiverem ordenados, você pode usar o comando sort antes do join.


Por exemplo:


$ join <(sort funcionarios.txt) <(sort salarios.txt)

Para juntar múltiplos arquivos, você pode usar o join em cascata:


$ join funcionarios.txt salarios.txt | join - departamentos.txt

E se seus arquivos usarem um delimitador diferente, como vírgulas em arquivos CSV, você pode especificar isso com a opção -t:


$ join -t, funcionarios.csv salarios.csv




O comando join é uma ferramenta versátil para combinar dados de diferentes arquivos no Linux. Com prática, você pode usá-lo para realizar operações complexas de mesclagem de dados diretamente no terminal. Lembre-se sempre de verificar se os arquivos estão ordenados corretamente pelo campo de junção antes de usar o join, para garantir resultados precisos e evitar problemas comuns.

quinta-feira, 20 de maio de 2021

Redução do tamanho de vídeos para postagem em redes sociais



Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 29 de junho de 2020

Fonte dicas-l.com.br

A maioria das redes sociais impõem limites ao tamanho de vídeos publicados. O Whatsapp, por exemplo, impõe um limite de 64MB aos arquivos enviados.

Como então converter os vídeos para que se adequem às normas das diferentes redes?

A solução é recorrer mais uma vez ao poderoso ffmpeg.

Entender todas as opções deste programa é tarefa para uma vida inteira, mas para reduzir o tamanho de um vídeo, sem perda de qualidade, a sintaxe do ffmpeg é muito simples:


$ ffmpeg -i videogrande.mp4 videopequeno.mp4
$ ls -lh videogrande.mp4 videopequeno.mp4
-rw-rw-r-- 1 queiroz queiroz 88M jun 28 11:56 videogrande.mp4
-rw-rw-r-- 1 queiroz queiroz 24M jun 28 12:15 videopequeno.mp4


Vejam só, uma redução de 88 MB para 24 MB. Ao menos para mim, não houve nenhuma perda de qualidade. Você poderia usar um editor de vídeo como ShotCut para obter o mesmo resultado, mas como a maioria (ou todos) os editores de vídeo usam ffmpeg, porque não ir pelo caminho mais fácil, não?




terça-feira, 26 de março de 2019

O "Jamming"



Fonte: Revista Saber 
Edição 16 - 1989

Autor Valter Aguiar



Incessantemente praticado durante muitos anos, o jamming era a grande "praga" dos ouvintes de ondas curta do mundo inteiro. Hoje, com a política de abertura da União Soviética, o jamming é muito menos praticado, mas ele  ainda existe. Mas, afinal de contas, o que é o jamming?  Jamming é o nome dado a qualquer espécie de interferência proposital destinada a encobrir o sinal de urna emissora que se deseje censurar, normalmente com fins políticos. O rádio internacional é um meio de comunicação sem fronteiras. Qualquer pessoa pode acompanhar os acontecimentos mundiais através da fonte de informação que bem entender. Pode-se ouvir a Voz da América ou a Rádio Moscou;  a Rádio Pequim ou a Voz da China Livre, de Formosa;  a Voz da Alemanha, de Colônia, ou a Rádio Berlim Internacional. A única limitação, nesta análise, refere-se ao orçamento de cada emissora. Naturalmente, os países ricos podem investir mais em rádios internacionais do que os países pobres. Com isso, as emissoras mais potentes e mais fáceis de captar são, via de regra, as dos países ricos. Entretanto, nem sempre é interessante para um governo permitir que uma emissora estrangeira com pontos de vista contrários ideologicamente seja ouvida pela sua população. E ai que entra a única forma de censura possível nas ondas curtas: o jamming, ou sejas, o bloqueio da emissora através da transmissão de ruído na mesma frequência. Como qualquer outro tipo de censura, o jamming é fruto de governos autoritários. Surgiu na ll Guerra Mundial, com o governo de Adolf Hitler interferindo nas frequências de várias emissoras dos aliados, em particular a BBC. Após a guerra, a União Soviética passou a interferir em várias emissoras do bloco capitalista. Os alvos principais eram a Rádio Liberdade e a Rádio Europa Livre, emissoras sediadas na Alemanha Ocidental e mantidas pelo governo dos Estados Unidos, que transmitem programas nos idiomas falados nos países socialistas. E não se trata apenas das grandes potências. Existem grupos contrários aos governos de seus países que mantêm emissoras clandestinas para difundir as suas ideias. Estas emissoras são alvo frequente de jamming. Um dos muitos exemplos é a conhecida centro americana Rádio Venceremos. Há ainda casos da interferência sofridas pela Voz  da América em chinês durante os episódios da Praça da Paz Celestial, em Pequim.
Existem diversas formas de se diminuir o problema causado pelo jamming. Do lado dos ouvintes, existe um modelo especial de antena de quadro que reduz o nível de ruído pela interferência. Por parte das emissoras, há duas saídas:  aumentar a potência de transmissão ou o número de frequências utilizadas, de forma a esgotar a capacidade de jamming do oponente e ainda restar alguma frequência livre. Tanto em um caso corno no outro, o resultado é o mesmo:  congestionamento da faixa, um problema já abordado em artigo anterior e do qual o jamming sempre foi um dos grandes responsáveis. As emissoras clandestinas, que não têm capacidade de transmissão para utilizar um dos sistemas acima, costumam adotar um artifício bastante interessante: variam suas frequências dia após dia, e até, durante uma mesma transmissão, a fim de despistar os praticantes do jamming.  Felizmente para os ouvintes de onda curta do mundo  inteiro, a política de abertura do presidente soviético Mikhail Gorbachev fez com que o jamming da União Soviética deixasse de ser praticado. No inicio de 1988, a União Soviética parou de interferir nas, transmissões da BBC e da Voz da América em  idioma russo. Posteriormente, foi  a  vez da Rádio Europa Livre e da Rádio Liberdade.
 O jamming continua sendo praticado por outros. países mas, na. maior parte das vezes, de maneira esporádica. Os transmissores que eram utilizados pela União Soviética para jamming agora emitem programas de um serviço mundial da Rádio Moscou, em russo. Esta atitude trouxe excelentes novidades para os radio escutas: menos ruído no ar e um novo e interessante serviço para ser ouvido!


domingo, 3 de fevereiro de 2019

Automatização de tarefas com crontab e cron



Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 19 de janeiro de 2018

Sem sombra de dúvida, um complemento fundamental para shell scripts, é a possibilidade de agendamento de tarefas. Com este recurso, propiciado pelos aplicativos cron e crontab, a tarefa de administração de sistemas fica grandemente facilitada. Eu mantenho cinco portais (Dicas-L, Contando Histórias, Aprendendo Inglês, Inglês Instrumental e o portal do Instituto de Desenvolvimento do Potencial Humano). Todas as tarefas de manutenção destes portais são feitas por meio de shell scripts, com execução automatizada por meio do cron. O envio das mensagens, a publicação das páginas, o backup do banco de dados, a cópia de segurança de todo o portal para outro servidor, a verificação da taxa de ocupação de espaço em disco, alertas em caso de uso excessivo de CPU e muito mais. Em suma, automatizei tudo que pude, caso contrário seria impossível cuidar de tantos portais.

A automatização de tarefas em sistemas GNU/Linux é feita por meio de dois programas: crontab e cron. Além destes programas, temos também, para cada usuário, um arquivo chamado crontab, que é o local onde são gravadas as diretivas que serão seguidas pelo cron. O arquivo crontab é editado pelo comando crontab. Os arquivos crontab dos usuários são gravados no diretório /var/spool/cron/crontabs.


O formato do arquivo crontab

Uma linha do arquivo crontab possui o seguinte formato:
0 6 * * * comando 
Os cinco primeiros campos determinam a periodicidade de execução do comando. Abaixo segue uma explicação do significado de cada um destes campos:

CampoSignificadoValores
1Minutos0 a 59
2Hora0 a 23
3Dia do mês1 a 31
4Mês1 a 12
5Dia da semana0 a 7, sendo que os números 0 e 7 indicam o domingo
6Comando a ser executadoqualquer comando válido do sistema

Exemplos
0  20 * * 1-5 comando
O comando será executado de segunda a sexta (1-5), exatamente às 20h.
10 10 1 * * comando
O comando será executado às 10h10, do dia 1º de todos os meses.
0,10,20,30,40,50, * 31 12 * comando


No dia 31 de dezembro, o comando será executado a cada dez minutos, o dia inteiro. Sempre que um campo for preenchido com o asterisco, significa que aquele campo assumirá todos os valores possíveis.

Podemos abreviar esta notação, em vez de especificar cada um dos minutos, podemos fazer da seguinte forma:
*/10 * 31 12 * comando


Os dias da semana podem também ser indicados por sua abreviação: sun, mon, tue, wed, thu, fri, sat.

Prosseguindo ...
* * * * * comando


Esta linha da crontab fará com que o comando seja executado todos os minutos, de todos os dias, de todos os meses. É apenas um exemplo, não faça isto, a não ser que tenha uma razão muito boa para tal.

Isto é o básico, mas o aplicativo cron oferece mais alguns recursos muito úteis. A tabela abaixo relaciona mais alguns parâmetros que podemos usar na crontab com seu significado:

ParâmetroDescriçãoEquivale a
@rebootocorre ao iniciar o computador
@yearlyocorre 1 vez ao ano0 0 1 1 *
@annuallyo mesmo que @yearly0 0 1 1 *
@monthlyocorre 1 vez ao mês0 0 1 * *
@weeklyocorre 1 vez na semana0 0 * * 0
@dailyExecuta uma vez ao dia0 0 * * *
@midnightmesmo que @daily0 0 * * *
@hourlyocorre 1 vez a cada hora0 * * * *


A diretiva @reboot é particularmente útil, pois em cada sistema nós temos tarefas que precisam ser executadas quando da inicialização da máquina e este parâmetro é um atalho muito conveniente para representar estas atividades.

Para utilizar estes parâmetros, bastam dois campos: o parâmetro em si e o nome do comando. Por exemplo, para executar o backup do banco de dados diariamente, acrescente a seguinte linha ao arquivo crontab:

@daily /usr/local/bin/db_backup.sh


O script db_backup.sh deve ser criado pelo administrador com as diretivas apropriadas para o backup do banco de dados.

Importante, se o seu computador não estiver no ar quando do horário da execução do comando, o cron não fará um novo agendamento, esta situação precisa ser tratada manualmente. A única exceção é a diretiva @reboot, que faz com que o comando especificado seja executado quanto a máquina for ligada.

Edição da crontab
Falta agora descobrir como editar a crontab, o que é bastante simples:
$ crontab -e
A diretiva -e indica ao programa crontab que queremos editar seu conteúdo. O arquivo crontab padrão vem com um conjunto de instruções (em inglês) sobre a sua sintaxe:
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

Todas as linhas iniciadas por # são comentários, e você pode removê-las quando quiser, sem problema algum.

O arquivo crontab será aberto utilizando o editor de sua preferência. Você pode definir esta preferência através da variável de ambiente EDITOR:export EDITOR=vi 


Se você não conhece o vi, pode usar o nano, que é um editor mais amigável, embora com muito menos recursos.

Caso deseje apenas listar o conteúdo do arquivo crontab, digite:
$ crontab -l
O usuário root pode editar diretamente a crontab dos usuários do sistema que administra. Para isto basta executar o comando:
# crontab -u [nome do usuário] -e 


IMPORTANTE: não é só colocar o comando na crontab e esquecer da vida, precisamos gerar alertas ou verificar a saída gerada pelo arquivo para ver se tudo deu certo.

Por padrão, o cron envia para o usuário um email com o resultado do comando. Através da análise destas mensagens, podemos decidir o que fazer.
Caso queiramos que o email seja enviado para um outro usuário, podemos definir, no arquivo crontab, a variável MAILTO:
 MAILTO="admin@mydomain.com" 
E se eu errar na edição da crontab, corro o risco de perder alguma coisa? Fique tranquilo, sempre que você gravar a crontab, se houver algum erro de sintaxe, o sistema te avisa, não grava as alterações e te pergunta se você quer refazer a edição:
$ crontab -e

crontab: installing new crontab
"/tmp/crontab.KA6PeR/crontab":24: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)


Não se esqueça, sempre coloque o caminho completo do comando, visto que a variável PATH da execução do comando via cron é diferente daquela do seu ambiente.

quinta-feira, 2 de agosto de 2018

Correios e Telégrafos - Alguém ainda acredita?






Por Rubens Queiroz de Almeida


Data de Publicação: 20 de Março de 2011


Por alguns anos eu venho tendo uma experiência bastante peculiar com o serviço dos Correios em minha cidade. Neste mês, vejam só o que ocorreu:

DocumentoData de VencimentoData de Entrega pelos Correios
Telefônica14/03/201118/03/2011
Embratel10/03/201118/03/2011
Submarino15/03/201118/03/2011
Sem Parar10/03/201118/03/2011
Comunicado Bancário04/03/201118/03/2011
Oi Celular16/03/201118/03/2011


Isto é o que ocorreu este mês (março de 2011), mas isto ocorre praticamente todos os meses. Paguei muita multa por conta disto. Vejam só, todas as correspondências foram entregues no dia 18 de março. Parece que juntaram tudo para entregar em um único dia. Estão otimizando o processo. Mas já é um progresso, antes nem entregavam. Outro fato interessante, o carteiro enfiava dentro da minha caixa postal a correspondência da rua inteira. Eu então, como bom cidadão que sou, fazia a entrega nas demais casas. Ao que parece, isto não aconteceu só comigo. Um amigo de Brasília relatou o mesmo fato. Reclamei com a ouvidoria dos Correios e felizmente esta prática foi interrompida.


Pode ser que isto seja apenas um problema localizado, talvez apenas comigo, ou apenas na minha rua. Mas uma correspondência que recebi do Submarino no dia 11 de março, me faz suspeitar que este problema seja generalizado:




Vejam só a mensagem: se a fatura não chegou, não se preocupe, é só emitir uma outra no site da empresa.
E tem mais, vamos ao mundo real. Alguns meses atrás, tive que ir na agência pegar uma encomenda. A fila estava grande e chegou o fim do expediente às 17h. Ainda havia umas 8 ou dez pessoas aguardando sua vez. Saiu então dos fundos da agência um "solícito" funcionário que começou a perguntar a cada um de nós o que estava aguardando. Eu, que era um dos últimos, só vi as pessoas saindo uma a uma, sem serem atendidas. Na minha vez, o funcionário perguntou o que eu ia fazer. Disse que ia pegar uma encomenda. Ele me perguntou se eu tinha o aviso dos correios. Eu disse que não, pois esperava poder pegar a encomenda fornecendo meu endereço e um documento. Ele me disse então que isto era impossível, que para pegar a encomenda só se eu tivesse o aviso. Fui então, junto com os demais, embora. Voltei no outro dia, com o aviso dos Correios. Ao chegar a minha vez, perguntei ao atendente se era possível pegar a encomenda fornecendo um documento e o meu endereço. A resposta foi: "É claro, com os seus dados pessoais conseguimos localizar perfeitamente qualquer encomenda dentro da agência". É um caso típico de exploração da humildade e desconhecimento da maioria da população para desrespeitar nossos direitos. Todos, inclusive eu, foram para casa sem falar nada.





E tem mais, se você tem uma correspondência importante, que você precisa garantir a entrega ao destinatário, qual a sua opção? Sedex, claro. Neste mes, para enviar um envelope com duas folhas, de Campinas para Brasília, paguei aproximadamente R$ 35,00. Era isto ou conviver com a incerteza quanto ao destino do meu documento. Pelo ocorrido com as correspondências da minha vizinhança, realmente é de dar medo. E no final das contas, acabamos mesmo desembolsando o valor estratosférico do SEDEX para garantir aquilo que deveria ser obrigatório para toda e qualquer correspondência: a certeza de chegar ao destino.


No dia 3 de outubro de 2008, após um total desapontamento com o serviço Claro 3G, eu escrevi o artigo Conexão Banda Larga Claro 3g, em que relatei minhas experiências e também como usei a busca no Google, com algumas palavras mágicas, para fazer uma avaliação da qualidade do serviço. Para o serviço Claro 3g, o total de resultados obtidos foi 121.000. Um outro provedor de serviços notório, a Telefônica, retornou 154.800 resultados. Vamos agora ver como o serviço dos Correios se sai em uma enquete similar:



Argumento de busca


Resultados
correios merda48.700
correios bosta164.000
correios porcaria25.300
correios lixo323.000
TOTAL561.000


Os Correios ganham de longe, 3,5 mais reclamações do que a Telefônica e 4,6 vezes mais que o serviço Claro 3G.


É claro que, sempre que possível, coloco as minhas contas no débito automático, para evitar o serviço porco dos Correios. Sempre que possível, peço também para que não me enviem correspondência, pois sinto que é dinheiro jogado fora e um desperdício imprimir faturas que não me servem para nada. Mas reconheço que isto não é o correto. Devemos reclamar para termos um serviço que é um direito de todos nós. Se o Facebook, Twitter, etc, estão derrubando as ditaduras do Oriente Médio e da África do Norte, podemos tentar melhorar o serviço de uma empresa tão importante para todos nós, como os Correios. Nasci em 1960 e durante grande parte da minha vida eu sempre ouvi as pessoas se referirem a esta empresa com respeito e admiração. Da mesma forma, havia um respeito pelos funcionários dos Correios e pelos carteiros. É doloroso ver como as coisas mudaram.


Espero que algo seja feito.

sexta-feira, 20 de julho de 2018

Senhas da rede wifi de mais de 130 aeroportos no mundo


Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 20 de julho de 2018
Fonte: www.dicas-l.com.br




Para quem vai viajar, vale a pena verificar o endereço http://bit.ly/airportwifimap
Esta página contém a relação de mais de 130 aeroportos no mundo e instruções sobre como acessar suas redes wifi.
A tela abaixo contém as informações do aeroporto de Guarulhos:




É claro que manter um banco de dados deste tamanho, com informações relativas a aeroportos do mundo inteiro, é bastante difícil. A boa notícia é que você mesmo pode complementar esta informação.


Referências

sábado, 12 de maio de 2018

Compactação de arquivos com xz



Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 10 de maio de 2018

Fonte: www.dicas-l.com.br

Estou muitos anos atrasado com esta dica, fiquei conhecendo hoje o método de compressão XZ.

Antes de falar mais sobre ele, vamos a um teste rápido:



Antes de falar mais sobre ele, vamos a um teste rápido:
$ gzip planilha.csv 
$ ls -lh planilha.csv.gz
-rw-r--r-- 1 queiroz queiroz 24K Mai  7 14:44 planilha.csv.gz
$ xz planilha.csv
$ ls -lh planilha.csv.xz 
-rw-r--r-- 1 queiroz queiroz 20K Mai  7 14:44 planilha.csv.xz



Vejam só, o arquivo compactado com o programa xz ficou 17% menor. Bastante significativo, não?

O comando tar para compactar arquivos utilizando este protocolo é também bastante simples:
tar Jcvf arquivo.tar.xz arquivo(s)

e  para descompactar:
 tar Jxvf arquivo.tar.xz


A diretiva J indica ao comando tar o tipo de compactação que será utilizado.
A diretiva J indica ao comando tar o tipo de compactação que será utilizado.
O pacote pxz utiliza a compressão LZMA em diferentes partes de um arquivo em múltiplos núcleos de processamento (cores) do seu processador. Desta forma a tarefa de compressão é dividida, cada corerecebe um pedaço do arquivo para trabalhar e o processamento é feito em paralelo. O objetivo final do pacote é utilizar todos os recursos computacionais disponíveis para obter a melhor taxa de compressão possível no menor tempo.
O programa xz faz parte do pacote xz-utils e o programa pxz faz parte do pacote pxz.   Para instalar os dois pacotes em sistemas Debian GNU/Linux e derivados, digite:
 sudo apt-get install xz-utils pxz