Questão de Sistemas Operacionais — Scripts em Unix e Linux — CESPE / CEBRASPE 2024
- Código
- ce404126
- Banca
- CESPE / CEBRASPE
- Órgão
- CNJ
- Ano
- 2024
- Cargo
- TJ
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: letra E (ERRADO). O script apresentado utiliza o comando awk para extrair os campos das linhas do arquivo de log, e não o comando sed. A afirmação de que "o comando sed extrai dados das colunas" é incorreta, pois o sed não é utilizado em nenhum ponto do código.
O script em questão é um exemplo clássico de processamento de arquivos de log no Linux, muito comum em questões de concursos da área de TI. Ele lê um arquivo de log do Apache (/var/log/apache2/access.log), linha por linha, e para cada linha extrai o primeiro campo (que corresponde ao endereço IP do cliente) e o sétimo campo (que corresponde à URL requisitada), gravando essas informações em um arquivo de saída. A ferramenta utilizada para essa extração é o awk, um comando poderoso para processamento de texto e manipulação de campos.
O awk é um interpretador de linguagem de programação orientado a linhas, que divide cada linha em campos (por padrão, separados por espaços em branco) e permite operações sobre esses campos. No script, awk '{print $1}' imprime o primeiro campo (IP) e awk '{print $7}' imprime o sétimo campo (URL). Já o sed (stream editor) é um editor de fluxo, utilizado principalmente para substituições, exclusões e inserções de texto, mas não para extração de campos por posição. A confusão entre awk e sed é uma pegadinha clássica, pois ambos são filtros de texto, mas com finalidades distintas.
Para entender melhor, vejamos um exemplo prático. Suponha que uma linha do arquivo de log seja:
192.168.1.100 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 2326
O comando awk '{print $1}' retornaria 192.168.1.100 (o IP), e awk '{print $7}' retornaria /index.html (a URL). O sed, por outro lado, poderia ser usado para substituir uma string, como sed 's/GET/POST/', mas não para extrair campos por posição.
A banca explora exatamente essa distinção: o candidato que conhece superficialmente os comandos pode confundir awk com sed, pois ambos são ferramentas de processamento de texto. No entanto, a função de extrair campos de uma linha é exclusiva do awk (e também do cut), enquanto o sed é mais adequado para edição de texto em fluxo.
Portanto, a afirmação está incorreta, pois o comando utilizado para extrair os dados das colunas é o awk, e não o sed. Essa é a pegadinha central da questão.
A alternativa afirma que "o comando sed extrai dados das colunas do arquivo atribuído à variável log_file". Isso está errado, pois o script não utiliza o comando sed em nenhum momento. A extração dos campos é feita pelo comando awk, como se vê nas linhas:
ip=$(echo "$line" | awk '{print $1}')
url=$(echo "$line" | awk '{print $7}')O awk é o comando responsável por dividir a linha em campos e imprimir os campos desejados ($1 para o IP e $7 para a URL). O sed, por sua vez, é um editor de fluxo que opera sobre linhas de texto, mas não é usado aqui. Portanto, a alternativa está incorreta, e o gabarito é a letra E.
A banca troca o comando awk pelo sed, dois filtros de texto que o candidato pode confundir. Lembre-se: awk é especialista em dividir linhas em campos e extrair colunas ($1, $2, ...), enquanto sed é um editor de fluxo para substituições e transformações. Se a questão pedir "extrair campos", o comando é awk (ou cut); se pedir "substituir texto", é sed.
Gabarito: letra E
Link permanente: /questoes/ce404126