Pular para o conteúdo

Executando awk a partir de shell script

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar

1. Executando awk a partir de shell script

Enviado em 24/06/2017 - 07:35h

Pessoal,
Tenho um arquivo passwd com o conteúdo abaixo:
root:xx:0:3::/:/sbin/sh
daemon:*:1:5::/:/sbin/sh
bin:*:2:2::/usr/bin:/sbin/sh
lp:*:9:7::/var/spool/lp:/sbin/sh
aluno1::101:20:,,,:/home/aluno1:/usr/bin/ksh
aluno2::102:20:,,,:/home/aluno2:/usr/bin/ksh
aluno3::103:20:,,,:/home/aluno3:/usr/bin/ksh

E um arquivo scri5.awk conforme abaixo:
BEGIN {OFS = "*"; totsel=0}
($4 == "20") {print $1, $6; totsel = totsel + 1}
END {print "O numero de usuarios lidos foi: " NR, "selecionado ", totsel}

Quando executo na linha de comando:
$ awk -F":" -f scri5.awk passwd
aluno1*/home/aluno1
aluno2*/home/aluno2
aluno3*/home/aluno3
O numero de usuarios lidos foi: 7*selecionado *3

o resultado é executado com sucesso, mas quando coloco o comando awk num shell script:

$ cat scri5.sh
#! /bin/bash

`awk 'BEGIN {FS = ":"; OFS = "*"} ($4 == "20") {print $1, $6} END {print "O numero de usuarios lido foi: " NR}' ./passwd`


Acontece o erro abaixo:

./scri5.sh: line 2: $'\r': comando não encontrado
./scri5.sh: line 3: aluno1*/home/aluno1: No such file or directory
./scri5.sh: line 4: $'\r': comando não encontrado

O que estou fazendo errado?

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

2. Re: Executando awk a partir de shell script

Enviado em 24/06/2017 - 12:03h

msandrini escreveu:

Pessoal,
Tenho um arquivo passwd com o conteúdo abaixo:
root:xx:0:3::/:/sbin/sh
daemon:*:1:5::/:/sbin/sh
bin:*:2:2::/usr/bin:/sbin/sh
lp:*:9:7::/var/spool/lp:/sbin/sh
aluno1::101:20:,,,:/home/aluno1:/usr/bin/ksh
aluno2::102:20:,,,:/home/aluno2:/usr/bin/ksh
aluno3::103:20:,,,:/home/aluno3:/usr/bin/ksh

E um arquivo scri5.awk conforme abaixo:
BEGIN {OFS = "*"; totsel=0}
($4 == "20") {print $1, $6; totsel = totsel + 1}
END {print "O numero de usuarios lidos foi: " NR, "selecionado ", totsel}

Quando executo na linha de comando:
$ awk -F":" -f scri5.awk passwd
aluno1*/home/aluno1
aluno2*/home/aluno2
aluno3*/home/aluno3
O numero de usuarios lidos foi: 7*selecionado *3

o resultado é executado com sucesso, mas quando coloco o comando awk num shell script:

$ cat scri5.sh
#! /bin/bash

`awk 'BEGIN {FS = ":"; OFS = "*"} ($4 == "20") {print $1, $6} END {print "O numero de usuarios lido foi: " NR}' ./passwd`


Acontece o erro abaixo:

./scri5.sh: line 2: $'\r': comando não encontrado
./scri5.sh: line 3: aluno1*/home/aluno1: No such file or directory
./scri5.sh: line 4: $'\r': comando não encontrado

O que estou fazendo errado?


Testei o comando aqui com meu /etc/passwd e funcionou muito bem. Você está escrevendo

`awk ... comando ...`

ou

VARIAVEL=`awk ... comando ...`

?

A primeira pode dar erro.

A saída do meu foi:

O numero de usuarios lido foi: 72.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

3. Re: Executando awk a partir de shell script

Enviado em 25/06/2017 - 06:50h

Olá Listeiro,

Eu mudei o script, ficou da seguinte forma:
#! /bin/bash

TOTAL=`awk 'BEGIN {FS = ":"; OFS = "*"} ($4 == "20") {print $1, $6} END {print "O numero de usuarios lido foi: " NR}' ./passwd`

echo "\nO numero de usuarios lidos foi " $TOTAL

Agora obtenho o resultado final (o número total de usuários lidos), mas o comando não mostra os usuários que satisfazem a condição ($4 == "20"), veja abaixo:

./scri5.sh: line 2: $'\r': comando não encontrado
./scri5.sh: line 4: $'\r': comando não encontrado
\nO numero de usuarios lidos foi aluno1*/home/aluno1 aluno2*/home/aluno2 aluno3*/home/aluno3 O numero de usuarios lido foi: 7

Não dá para fazer isso executando um comando awk dentro do shell script?

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder