Exercicio complicado!

1. Exercicio complicado!

PatinhoLok0
PatoideOide

(usa Debian)

Enviado em 08/05/2017 - 12:46h

Ola galera, tudo bom.
Meu professor de SISTEMAS OPERACIONAIS II
Passou uma lista de exercícios e eu estava resolvendo alguns.
Mas admito que esse aqui eu não consegui nao.
Alguem poderia me ajudar?


Exercício 9

Crie 3 arqs via vi que tenham os seguintes conteúdos:
Arq1: 10 nomes
Arq2: 10 Cidades
Arq3: 10 linhas com: telefone, cep,estado, região, ddd – todos separados com delimitador “;”
Após isso fazer:
1) gravar um novo arq a partir do arq3 apenas com os campos ddd, telefone, estado
2) gerar um novo arq a partir do arq2 apenas com cidades 4,5,6 e 7
3) criar um novo arq a partir do arq1 em que todos os nomes estarão em letra maiúscula
4)Gerar um novo arq sem as linhas repetidas a partir do arq2. Obs: O arq2 tem que possuir linhas repetidas.
5)Juntar os arq1 e arq2 em um novo arq.
Todas as opções de 1 a 5 tem que ser feita em apenas uma shell para execução em sala.
Fazer as opções em formar de um programa(shell) com menu das opções.



  


2. Re: Exercicio complicado!

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/05/2017 - 13:15h

PatoideOide escreveu:

Ola galera, tudo bom.
Meu professor de SISTEMAS OPERACIONAIS II
Passou uma lista de exercícios e eu estava resolvendo alguns.
Mas admito que esse aqui eu não consegui nao.
Alguem poderia me ajudar?


Exercício 9

Crie 3 arqs via vi que tenham os seguintes conteúdos:
Arq1: 10 nomes
Arq2: 10 Cidades
Arq3: 10 linhas com: telefone, cep,estado, região, ddd – todos separados com delimitador “;”
Após isso fazer:
1) gravar um novo arq a partir do arq3 apenas com os campos ddd, telefone, estado
2) gerar um novo arq a partir do arq2 apenas com cidades 4,5,6 e 7
3) criar um novo arq a partir do arq1 em que todos os nomes estarão em letra maiúscula
4)Gerar um novo arq sem as linhas repetidas a partir do arq2. Obs: O arq2 tem que possuir linhas repetidas.
5)Juntar os arq1 e arq2 em um novo arq.
Todas as opções de 1 a 5 tem que ser feita em apenas uma shell para execução em sala.
Fazer as opções em formar de um programa(shell) com menu das opções.


Primeiro você digita conforme explicado. Consegue usar os comandos no editor de texto vi?
Ou seria vim?

Depois terá de ser usado comando via terminal, tais que piquem o arquivo, depois sendo redirecionada essa saída para um arquivo novo.

A questão 1 pode ser feita usando o comando cut ou o comando awk.
Depois você redireciona para o arquivo de saída.

awk '{ print ..... campos ... }' -F';' arq3 > arq_novo-03
ou
cut -d; -f campos arq3 > arq_novo-01

Na questão 2, se for cidades na mesma linha, você usa awk ou cut como acima. Se for em linhas diferentes, você usa sed. Algo como

sed '4,7!d' arq2 > arq_novo-02

Esse comando é chato e sugiro que você pesquise sobre a opção.

Na questão 3 você pode usar o comando tr ou uma opção muito extensa do sed usando comando y. Use o redirecionamento de saída > como feito acima.

Na questão 4 você usará dois comandos: sort, que ordena linhas; e uniq, que revove linhas repetidas. Algo como

sort arq2 | uniq > ...

O comando sort tem até opção que dispensa uniq, mas assim é o mais ensinado.

A questão 5 é a mais simples. Usa-se apenas o comando cat

cat arq1 arq2 > novo_arquivo.

Quanto ao menu:

Estive escrevendo um texto para o VOL, de modo que trata-se exatamente de menu em BASH usando o comando select.
Acho que vou colar o texto inédito aqui antes de a moderação liberar para você ver sobre o menu.

----------------------------------------------------------------------------------------------------------------
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: Exercicio complicado!

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/05/2017 - 13:20h

O texto do conteúdo que fiz para o VOL segue abaixo. Tirei umas partes para encurtar:

O comando "select" permite a criação de um menu bem rudimentar em modo texto, sem o recurso de caixas de texto, como as do aplicativo de terminal dialog, que aparecem em certos momentos na instalação e configuração de distros como Slackware e Debian.

Ele cria um sistema de verificação de variável, através de opções numéricas em loop com prompt, que dispensa o uso de comandos como read, while e for. Vem tudo num pacote só.

A única coisa requerida dentro da estrutura "select ... do ... done" é uma outra estrutura, a de decisão, que pode ser feita pelos comandos "if ... then ... elif ... else ... fi", "case ... esac" ou até por concatenação usando o comando test e os operadores de concatenação de execução de comandos && e ||.

Segue um exemplo de programa:

#!/bin/bash

echo "=== MENU EM BASH ==="

select i in inclusao alteracao exclusao consulta sair
do

case "$i" in

inclusao)
echo "inclui usuario"
;;

alteracao)
echo "altera usuario"
;;

exclusao)
echo "exclui usuario"
;;

consulta)
echo "consulta usuario"
;;

sair)
echo "saindo do programa"
break
;;

*)
echo "opcao invalida, tente de novo"
;;

esac

done

exit 0


Ao se executar este código, aparece o seguinte texto na tela:

=== MENU EM BASH ===
1) inclusao
2) alteracao
3) exclusao
4) consulta
5) sair
#?


Na primeira linha há um anúncio do que se trata: um menu em BASH. Obviamente.

A partir daí há a exibição das opções do menu, com itens enumerados de 1 a 5, representando um hipotético cadastro.
Para ser um programa de verdade, falta a elaboração do código de gerenciamento de cadastro de dados, como o de uma agenda, por exemplo. É um sistema exemplificado que pode ser implementado no futuro, sendo feito apenas o menu por agora.

A última linha representada pelos caracteres #? representa o prompt, que espera pelo número da opção. No caso um dos números de 1 a 5.

Ao digitar os números de 1 a 5, a variável declarada no "select" ganha a atribuição do texto ao lado do número no menu. Este texto vai para a estrutura "case ... esac" que analisa o que fazer. Para as opções de 1 a 5 é verificado se o valor da variável i corresponde a uma das opções: inclusao, alteracao, exclusao, consulta, sair e o coringa * (otherwise ou default em outras linguagens) para qualquer outro caso.

Conforme a alternativa corresponda, é emitido apenas um texto de aviso sobre a opção selecionada. Exceto pela opção 5, que emite a mensagem e sai do programa. Esta saída é feita pelo comando break, que força a retirada da estrutura "select", como é feito quando se usa for e while (lá em cima está escrito que select dispensa loop com for e while, lembram?)

No caso de a opção digitada ser diferente de uma das opções de 1 a 5 é emitida a mensagem de erro, solicitando nova tentativa.

Conforme explicado. usando a opção 5 a mensagem de saída é exibida e o comando break força a saída do "select". Como só há o comando exit 0, o programa é encerrado retornando o valor 0 para o sistema operacional.

A explicação do menu está na íntegra. Os comandos das operações foram dados em parte para você dar uma pesquisada.

Veja se está tudo bem.


4. Re: Exercicio complicado!

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/05/2017 - 18:05h

PatoideOide escreveu:

Ola galera, tudo bom.
Meu professor de SISTEMAS OPERACIONAIS II
Passou uma lista de exercícios e eu estava resolvendo alguns.
Mas admito que esse aqui eu não consegui nao.
Alguem poderia me ajudar?


Exercício 9

Crie 3 arqs via vi que tenham os seguintes conteúdos:
Arq1: 10 nomes
Arq2: 10 Cidades
Arq3: 10 linhas com: telefone, cep,estado, região, ddd – todos separados com delimitador “;”
Após isso fazer:
1) gravar um novo arq a partir do arq3 apenas com os campos ddd, telefone, estado
2) gerar um novo arq a partir do arq2 apenas com cidades 4,5,6 e 7
3) criar um novo arq a partir do arq1 em que todos os nomes estarão em letra maiúscula
4)Gerar um novo arq sem as linhas repetidas a partir do arq2. Obs: O arq2 tem que possuir linhas repetidas.
5)Juntar os arq1 e arq2 em um novo arq.
Todas as opções de 1 a 5 tem que ser feita em apenas uma shell para execução em sala.
Fazer as opções em formar de um programa(shell) com menu das opções.


Boa noite.
Segue uma opção de menu.....
Centraliza na tela, colorido, etc.
Pressionando [mM] reposiciona e muda a cor . . .
Para cada OPÇãO do MENU, crie uma função correspondente. . .
#!/bin/bash
#\x1B[0;38;5;148m:D
#VARIÁVEIS
CE=$(sed -n '2p' $0|sed 's/#//;s/..$//')
CA="\x1B[0;38;5;11m"
DCOR=$(sed -n '2p' $0|cut -d: -f2)
CVA="\x1B[0;38;5;196m"
CV="\x1B[0;38;5;2m"
FC="\x1B[m"

PMENU() {
SRCFUNCTION=MENU;GERACOR;COLS
}

MENU() {
tput clear
printf "$CE\e[2;${POS2}f••••••••••••••••••••••••••••••••••••••••"
printf "\e[3;${POS1}f•••••••••••••••••• MENU ••••••••••••••••••"
printf "\e[4;${POS}f•••\e[4;${POS4}f•••"
printf "\e[5;${POS}f•••$CSM [1] OPÇãO [4] OPÇãO $CE•••"
printf "\e[6;${POS}f•••$CSM [2] OPÇãO [5] OPÇãO $CE•••"
printf "\e[7;${POS}f•••$CSM [3] OPÇãO [6] EXIT $CE•••"
printf "\e[8;${POS}f•••\e[8;${POS4}f•••"
printf "$CE\e[9;${POS1}f••••••••••••••••••••••••••••••••••••••••••"
printf "\e[10;${POS2}f••••••••••••••••••••••••••••••••••••••••\n\n"$FC""
read -p " OPÇãO: " -n1 OPC
echo -e "\n"
case "$OPC" in
1) FUNÇãO_01 ;;
2) FUNÇãO_02 ;;
3) FUNÇãO_03 ;;
4) FUNÇãO_04 ;;
5) FUNÇãO_05 ;;
6) exit ;;
[Mm]) PMENU ;;
*) MSGM ; MENU ;;
esac
}

COLS() {
COLS=$(tput cols)
POS=$(((COLS-44)/2))
POS1=$((POS+1))
POS2=$((POS+2))
POS3=$(((COLS-47)/2))
POS4=$((POS2+39))
if (($FINIC=="0")) 2> /dev/null;then
FINIC="1";MAISMENU;sleep 1.5;$SRCFUNCTION
else
[ $SRCFUNCTION ] 2> /dev/null && "$SRCFUNCTION"
fi
}

GERACOR() {
[[ -z $CNT ]] && { CNT="1";export CNT ; }
local SCOR="\x1B["$((CNT%2))";38;5;"$((CNT/2))"m"
[ $SRCFUNCTION ] && CSM="$SCOR" || { CS="$SCOR" ; CS1="\x1B["$(((32-CNT)%2))";38;5;"$(((32-CNT)/2))"m" ; }
let CNT++;(($CNT>31)) && CNT="1"
}

MSGM() { echo -e "$CVA \" OPÇãO INVáLIDA! \" $FC" ; sleep 1.25 ; }

PMENU

att.:
marcelo oliver







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts