No Linux, considere a existência de um arquivo “arquivo.txt”...

Próximas questões
Com base no mesmo assunto
Q386858 Sistemas Operacionais
No Linux, considere a existência de um arquivo “arquivo.txt” no diretório corrente, com o seguinte conteúdo:
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 é:
Alternativas

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