Modificar uma coluna em um intervalo específico de linhas

1. Modificar uma coluna em um intervalo específico de linhas

Elder Augusto Viana Mota
EAVMota

(usa Ubuntu)

Enviado em 17/11/2020 - 19:07h

Olá galera, boa noite!
Eu tô tentando criar um shell script que modifique uma string repetida em uma coluna e ordene uma outra coluna, mas isso apenas em um dado intervalo de linhas de um arquivo.
Por exemplo, supondo o arquivo de texto abaixo:

1 texto
2 texto
3 texto
4 25 A Azul 10
5 27 B Azul 10
6 26 C Azul 10
7 22 D Azul 10
8 20 F Azul 10
9 texto
10 texto
11 texto

Nesse exemplo, o primeiro objetivo seria ordenar os elementos da primeira coluna entre as linhas 4 e 8, o segundo e terceiro seriam substuir o "Azul" por "Verde" e o "10" por "5" nas colunas 5 e 6 do mesmo intervalo.
Eu sei que posso usar o "sort -n -k1" pra ordenar os elementos da primeira coluna e usar o "sed" para substituir o "Azul" por "Verde" e "10" por "5". O problema que encontro é como restringir apenas para o intervalo de linhas 4 e 8 (no caso do "sort" e do "sed") e apenas para a coluna desejada (no caso do "sed"), e não para o texto todo. Eu sinto que tenho que usar o "awk" de alguma forma, mas não sei como kkkkkk
Alguém pode me ajudar?
Eu tô começando a usar shell script, então pode ser que haja uma maneira mais simples de fazer isso do que essa que eu sugeri. Se alguém souber de outra forma de fazer isso, eu também agradeceria se compartilha-se kkkkkk
Tudo de bom!
Desde já agradeço!


  


2. Re: Modificar uma coluna em um intervalo específico de linhas

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/11/2020 - 21:58h

EAVMota escreveu:

Olá galera, boa noite!
Eu tô tentando criar um shell script que modifique uma string repetida em uma coluna e ordene uma outra coluna, mas isso apenas em um dado intervalo de linhas de um arquivo.
Por exemplo, supondo o arquivo de texto abaixo:

1 texto
2 texto
3 texto
4 25 A Azul 10
5 27 B Azul 10
6 26 C Azul 10
7 22 D Azul 10
8 20 F Azul 10
9 texto
10 texto
11 texto

Nesse exemplo, o primeiro objetivo seria ordenar os elementos da primeira coluna entre as linhas 4 e 8,
o segundo e terceiro seriam substituir o "Azul" por "Verde" e o "10" por "5" nas colunas 5 e 6 do mesmo intervalo.
Eu sei que posso usar o "sort -n -k1" pra ordenar os elementos da primeira coluna e usar o "sed" para substituir o "Azul" por "Verde" e "10" por "5". O problema que encontro é como restringir apenas para o intervalo de linhas 4 e 8 (no caso do "sort" e do "sed") e apenas para a coluna desejada (no caso do "sed"), e não para o texto todo. Eu sinto que tenho que usar o "awk" de alguma forma, mas não sei como kkkkkk
Alguém pode me ajudar?
Eu tô começando a usar shell script, então pode ser que haja uma maneira mais simples de fazer isso do que essa que eu sugeri. Se alguém souber de outra forma de fazer isso, eu também agradeceria se compartilha-se kkkkkk
Tudo de bom!
Desde já agradeço!

Boa noite EAVMota.
O arquivo original tem essa numeração de linha, conforme o exemplo? Não né!
Tá meio confuso.....
substituir o "Azul" por "Verde" e o "10" por "5" nas colunas 5 e 6 do mesmo intervalo.
Estou vendo só 5 campos.....isso considerando o nº da linha......
Considerando o arquivo com o seguinte conteúdo:
texto_linha01
texto_linha02
texto_linha03
25 A Azul 10
27 B Azul 10
26 C Azul 10
22 D Azul 10
20 F Azul 10
texto_linha09
texto_linha10
texto_linha11
A saída que deseja é:
texto_linha01
texto_linha02
texto_linha03
20 F Verde 5
22 D Verde 5
25 A Verde 5
26 C Verde 5
27 B Verde 5

texto_linha09
texto_linha10
texto_linha11


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________



3. Re: Modificar uma coluna em um intervalo específico de linhas

Elder Augusto Viana Mota
EAVMota

(usa Ubuntu)

Enviado em 17/11/2020 - 22:42h

Oi Marcelo, boa noite. Primeiramente, obrigado por responder!
Não, esse não é o arquivo que quero editar. O que quero editar possui umas 200 linhas. Esse foi só um exemplo que bolei na hora pra tentar explicar, mas vejo que fui um pouco infeliz e fiz um pouco de confusão kkkkk
A primeira coluna do exemplo seria o número de linhas, ou seja, seriam só 11 linhas e 4 entradas nesse exemplo que dei. Então seria usar o "sed" nas colunas 3 e 4. Perdão!
Mas o objetivo, para o exemplo, seria obter essa saída que tu escreveu no comentário, utilizando o "sed" e "sort" em um intervalo específico de linhas. Tentei fazer lendo outros tópicos daqui do site mas não consegui.



4. Re: Modificar uma coluna em um intervalo específico de linhas

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/11/2020 - 23:37h

EAVMota escreveu:

Oi Marcelo, boa noite. Primeiramente, obrigado por responder!
Não, esse não é o arquivo que quero editar. O que quero editar possui umas 200 linhas. Esse foi só um exemplo que bolei na hora pra tentar explicar, mas vejo que fui um pouco infeliz e fiz um pouco de confusão kkkkk
A primeira coluna do exemplo seria o número de linhas, ou seja, seriam só 11 linhas e 4 entradas nesse exemplo que dei. Então seria usar o "sed" nas colunas 3 e 4. Perdão!
Mas o objetivo, para o exemplo, seria obter essa saída que tu escreveu no comentário, utilizando o "sed" e "sort" em um intervalo específico de linhas. Tentei fazer lendo outros tópicos daqui do site mas não consegui.

EAVMota,
a parte do 'sed', é tranquila....
sed -n 's/Azul/Verde/;s/ 10$/ 5/p' texto.txt |sort
O que tentei e não consegui, é:
Salvar essa parte com as alterações e ordenada => OK
Retirar a parte que será alterada e ordenada, do arquivo inicial => OK
Juntar todo...... NÃO OK...

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver




5. Re: Modificar uma coluna em um intervalo específico de linhas

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 18/11/2020 - 00:47h

Parece que deu certo...
Segue anexo:
Aqui se faz, aqui se paga...... KKKKKKKKK,
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.

______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts