No Linux, considere a existência de um arquivo “arquivo.txt”...
linha 1 valor 10 linha 2 valor 20 linha 3 valor 30
Deseja-se produzir, a partir do arquivo, a seguinte saída:
1 - 10 2 - 20 3 - 30
O script shell usado com comandos AWK que produz a saída desejada é:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
O gabarito correto é a alternativa B.
Primeiramente, vamos entender a questão. A questão aborda o uso de comandos AWK em scripts shell no Linux. O AWK é uma poderosa linguagem de manipulação de textos e dados. Ele é frequentemente utilizado para analisar e transformar arquivos de texto baseados em padrões.
O objetivo aqui é processar um arquivo chamado arquivo.txt, que contém o seguinte conteúdo:
linha 1 valor 10
linha 2 valor 20
linha 3 valor 30
Deseja-se transformar esse conteúdo na seguinte saída formatada:
1 - 10
2 - 20
3 - 30
Vamos analisar a alternativa correta, a alternativa B, e entender por que ela está correta:
B - cat arquivo.txt | awk '{ print $2" - "$4 }'
Aqui, a combinação do comando cat
com o awk
é utilizada para ler e processar o conteúdo do arquivo. O comando cat arquivo.txt
vai ler o conteúdo do arquivo e passá-lo para o awk
através de um pipe (|). Dentro do awk
, a expressão { print $2" - "$4 }
é usada para formatar a saída.
No awk
, $2
e $4
representam, respectivamente, o segundo e o quarto campos de cada linha do arquivo de entrada, separados por espaços. Aplicando isso ao conteúdo do arquivo:
linha 1 valor 10 → $2 = 1, $4 = 10
linha 2 valor 20 → $2 = 2, $4 = 20
linha 3 valor 30 → $2 = 3, $4 = 30
A expressão { print $2" - "$4 }
vai gerar a saída desejada:
1 - 10
2 - 20
3 - 30
Agora, vamos analisar as alternativas incorretas:
A - awk arquivo.txt '{ print $2" - "$4 }'
Essa alternativa está incorreta porque o awk
não está recebendo o arquivo de entrada corretamente. O comando awk arquivo.txt '{ print $2" - "$4 }'
não é sintaticamente correto. A forma adequada para passar um arquivo como entrada para o awk
é usar um pipe ou especificar o arquivo após a expressão awk '{...}' arquivo.txt
.
C - cat arquivo.txt | awk '{ print $1" - "$3"\n" }'
Essa alternativa está incorreta porque está tentando imprimir os campos $1
e $3
, que são "linha" e "valor", respectivamente, e não formata a saída como desejado. Além disso, o \n
dentro de print
é incorreto, pois print
já adiciona uma nova linha por padrão.
D - cat arquivo.txt | awk '{ printf($2" - "$4) }'
Essa alternativa está incorreta porque o printf
no awk
requer uma string de formato. O correto seria algo como printf "%s - %s\n", $2, $4
. Apenas usar printf($2" - "$4)
não vai adicionar uma nova linha após cada saída.
Espero que essa explicação tenha ajudado a compreender melhor como usar o AWK para manipulação de textos no Linux. Se tiver alguma dúvida, sinta-se à vontade para perguntar!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Gabarito: B, cat arquivo.txt | awk '{ print $2" - "$4 }'
cat arquivo.txt diz para o shell imprimir o que está no arquivo.
O pipe -> | <- informa que o processamento do texto obedecerá as regras do comando a direita.
O comando -> '{ print $2" - "$4 }' diz que quer que seja impresso o segundo e o quarto argumento, separados por um sinal de menos (-).
linha 1 valor 10 linha 2 valor 20 linha 3 valor 30.
A saída será 1 - 10, que é o mais próximo da alternativa correta..
na letra C: O "\n" gera uma quebra de linha (pula uma linha)
na letra D: a saída é similar a alternativa B, só que fica grudado ao nome do usuário atual do shell.. (meio ilegível).
Vou reescrever:
1: linha 1 valor 10
2: linha 2 valor 20
3: linha 3 valor 30
repare que adiciono ao comando um espaço " ":
cat arquivo.txt | awk '{printf($2" - "$4" ")}'
resultado
1 - 10 2 - 20 3 - 30
b-
o arquiv é
linha 1 valor 10
linha 2 valor 20
linha 3 valor 30
desej-ase extrair os valores da 2° e 4° colunas de cada linha
logo: awk '{ print $2 $4}'
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo