Ajuda com o comando GREP, ou algum outro comando que possa manipular arquivo de texto [RESOLVIDO]

1. Ajuda com o comando GREP, ou algum outro comando que possa manipular arquivo de texto [RESOLVIDO]

Ygor Diniz Carvalhedo
ygordc

(usa Debian)

Enviado em 20/03/2022 - 23:30h

Boa noite pessoal,
Primeiramente ja agradeço a atenção de voces
Vou postar aqui

Este é o arquivo original que preciso alterar, preciso apenas dos valores acima de 0.0 separados por seus states
obs ( são 370 arquivos com 40 states cada, por isso a necessidade do script, apenas para exemplificar coloquei até o state 10, para que os senhores consigam me ajudar )

--------------------------------------------
CIS-EXCITED STATES (SINGLETS)
STATE 1: E= 0.090038 au 2.450 eV 19761.2 cm**-1
50a -> 55a : 0.132262 (c= -0.36367774)
53a -> 55a : 0.812800 (c= 0.90155409)
STATE 2: E= 0.110977 au 3.020 eV 24356.5 cm**-1
47a -> 59a : 0.018200 (c= 0.13490770)
50a -> 59a : 0.036119 (c= -0.19004881)
52a -> 56a : 0.026559 (c= -0.16296896)
53a -> 54a : 0.739599 (c= -0.85999918)
53a -> 56a : 0.070135 (c= -0.26482941)
53a -> 59a : 0.016325 (c= 0.12776924)
STATE 3: E= 0.116837 au 3.179 eV 25642.7 cm**-1
43a -> 57a : 0.031673 (c= -0.17796899)
46a -> 56a : 0.011604 (c= 0.10772217)
46a -> 63a : 0.021484 (c= 0.14657320)
48a -> 54a : 0.343012 (c= 0.58567203)
48a -> 56a : 0.054579 (c= 0.23362063)
48a -> 59a : 0.014266 (c= -0.11943953)
48a -> 63a : 0.015408 (c= 0.12412857)
50a -> 55a : 0.018532 (c= -0.13613391)
53a -> 57a : 0.408578 (c= -0.63920080)
STATE 4: E= 0.120385 au 3.276 eV 26421.5 cm**-1
43a -> 57a : 0.033477 (c= -0.18296843)
46a -> 56a : 0.011597 (c= -0.10769033)
46a -> 59a : 0.011064 (c= -0.10518505)
46a -> 63a : 0.016126 (c= -0.12698814)
48a -> 54a : 0.330767 (c= -0.57512373)
48a -> 56a : 0.036639 (c= -0.19141269)
48a -> 59a : 0.036668 (c= 0.19148880)
53a -> 57a : 0.436116 (c= -0.66039051)
STATE 5: E= 0.126849 au 3.452 eV 27840.0 cm**-1
45a -> 54a : 0.070600 (c= 0.26570622)
45a -> 56a : 0.070102 (c= -0.26476866)
45a -> 59a : 0.037996 (c= -0.19492600)
45a -> 61a : 0.086083 (c= -0.29339881)
45a -> 64a : 0.107306 (c= -0.32757526)
46a -> 54a : 0.194725 (c= -0.44127628)
46a -> 56a : 0.038244 (c= 0.19556032)
46a -> 59a : 0.033911 (c= 0.18414830)
46a -> 61a : 0.077369 (c= 0.27815238)
46a -> 64a : 0.119180 (c= 0.34522405)
48a -> 56a : 0.044350 (c= -0.21059555)
48a -> 61a : 0.024170 (c= -0.15546742)
48a -> 63a : 0.012611 (c= -0.11229664)
48a -> 64a : 0.017169 (c= -0.13103104)
STATE 6: E= 0.138585 au 3.771 eV 30415.8 cm**-1
45a -> 54a : 0.088338 (c= -0.29721708)
45a -> 59a : 0.014431 (c= 0.12012734)
46a -> 54a : 0.070296 (c= -0.26513428)
46a -> 56a : 0.031365 (c= -0.17710286)
46a -> 63a : 0.010089 (c= -0.10044228)
47a -> 55a : 0.370648 (c= -0.60880833)
47a -> 57a : 0.013783 (c= 0.11740176)
47a -> 62a : 0.010679 (c= -0.10334024)
48a -> 59a : 0.071305 (c= -0.26703060)
48a -> 63a : 0.106657 (c= -0.32658435)
50a -> 55a : 0.126825 (c= -0.35612449)
STATE 7: E= 0.139661 au 3.800 eV 30652.1 cm**-1
44a -> 61a : 0.015042 (c= -0.12264606)
45a -> 55a : 0.016170 (c= -0.12716319)
48a -> 55a : 0.417464 (c= 0.64611437)
49a -> 58a : 0.055488 (c= -0.23555792)
51a -> 60a : 0.013862 (c= -0.11773675)
52a -> 54a : 0.086988 (c= 0.29493789)
52a -> 56a : 0.239934 (c= -0.48983064)
53a -> 56a : 0.032381 (c= 0.17994772)
53a -> 59a : 0.022223 (c= 0.14907309)
STATE 8: E= 0.140805 au 3.831 eV 30903.1 cm**-1
43a -> 55a : 0.022039 (c= 0.14845445)
43a -> 62a : 0.010939 (c= -0.10458897)
45a -> 54a : 0.097577 (c= -0.31237265)
45a -> 59a : 0.016654 (c= 0.12904938)
46a -> 54a : 0.073708 (c= -0.27149140)
46a -> 56a : 0.032162 (c= -0.17933695)
46a -> 61a : 0.010247 (c= -0.10122570)
47a -> 55a : 0.140473 (c= 0.37479768)
47a -> 57a : 0.017185 (c= -0.13109230)
47a -> 62a : 0.018771 (c= 0.13700867)
48a -> 59a : 0.069226 (c= -0.26310777)
48a -> 63a : 0.087903 (c= -0.29648447)
50a -> 55a : 0.093739 (c= 0.30616749)
50a -> 62a : 0.045628 (c= -0.21360795)
53a -> 55a : 0.010712 (c= 0.10349812)
53a -> 57a : 0.016685 (c= -0.12917224)
53a -> 62a : 0.165506 (c= 0.40682435)
STATE 9: E= 0.141533 au 3.851 eV 31063.0 cm**-1
44a -> 61a : 0.014336 (c= -0.11973184)
45a -> 55a : 0.013006 (c= 0.11404591)
48a -> 55a : 0.432829 (c= -0.65789703)
48a -> 57a : 0.020743 (c= -0.14402447)
49a -> 58a : 0.068653 (c= -0.26201627)
50a -> 54a : 0.011355 (c= 0.10655755)
52a -> 54a : 0.079637 (c= 0.28219983)
52a -> 56a : 0.232238 (c= -0.48191118)
53a -> 56a : 0.015911 (c= 0.12613889)
STATE 10: E= 0.142388 au 3.875 eV 31250.5 cm**-1
47a -> 60a : 0.021105 (c= 0.14527651)
50a -> 59a : 0.015454 (c= 0.12431387)
50a -> 60a : 0.157723 (c= -0.39714370)
51a -> 54a : 0.215728 (c= -0.46446535)
51a -> 56a : 0.071100 (c= -0.26664584)
51a -> 59a : 0.166282 (c= -0.40777686)
51a -> 60a : 0.022142 (c= -0.14880199)
51a -> 61a : 0.022370 (c= 0.14956762)
51a -> 63a : 0.033928 (c= 0.18419594)
52a -> 56a : 0.014597 (c= 0.12081606)
53a -> 59a : 0.044914 (c= 0.21192948)
53a -> 60a : 0.179818 (c= -0.42404935)
----------------------------------------

ao executar o comando ( grep -F -v '0.0' 1.txt ) eu consigo a saida abaixo, porem os states que possuem 0.0 na numeração tambem são afetados pelo comando ,e preciso deles no arquivo final, existem alguma forma de ignorar toda linha que tiver STATE ? utilizando grep ou algum outro comando de manipulação de texto.

neste exeplo o state 1 , e o 5 foram afetados pois tinham 0.0 em sua numeração
---------------------------------------------------------------
CIS-EXCITED STATES (SINGLETS)
50a -> 55a : 0.132262 (c= -0.36367774)
53a -> 55a : 0.812800 (c= 0.90155409)
STATE 2: E= 0.110977 au 3.020 eV 24356.5 cm**-1
53a -> 54a : 0.739599 (c= -0.85999918)
STATE 3: E= 0.116837 au 3.179 eV 25642.7 cm**-1
48a -> 54a : 0.343012 (c= 0.58567203)
53a -> 57a : 0.408578 (c= -0.63920080)
STATE 4: E= 0.120385 au 3.276 eV 26421.5 cm**-1
48a -> 54a : 0.330767 (c= -0.57512373)
53a -> 57a : 0.436116 (c= -0.66039051)
45a -> 64a : 0.107306 (c= -0.32757526)
46a -> 54a : 0.194725 (c= -0.44127628)
46a -> 64a : 0.119180 (c= 0.34522405)
STATE 6: E= 0.138585 au 3.771 eV 30415.8 cm**-1
47a -> 55a : 0.370648 (c= -0.60880833)
48a -> 63a : 0.106657 (c= -0.32658435)
50a -> 55a : 0.126825 (c= -0.35612449)
STATE 7: E= 0.139661 au 3.800 eV 30652.1 cm**-1
48a -> 55a : 0.417464 (c= 0.64611437)
52a -> 56a : 0.239934 (c= -0.48983064)
STATE 8: E= 0.140805 au 3.831 eV 30903.1 cm**-1
47a -> 55a : 0.140473 (c= 0.37479768)
53a -> 62a : 0.165506 (c= 0.40682435)
STATE 9: E= 0.141533 au 3.851 eV 31063.0 cm**-1
48a -> 55a : 0.432829 (c= -0.65789703)
52a -> 56a : 0.232238 (c= -0.48191118)
STATE 10: E= 0.142388 au 3.875 eV 31250.5 cm**-1
50a -> 60a : 0.157723 (c= -0.39714370)
51a -> 54a : 0.215728 (c= -0.46446535)
51a -> 59a : 0.166282 (c= -0.40777686)
53a -> 60a : 0.179818 (c= -0.42404935)
--------------------------------------------------------




  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/03/2022 - 20:26h

ygordc escreveu:


Consegui fazendo da seguinte forma

adicionei mais parametros no grep, desta forma ele gera um arquivo com todas as informações que preciso, porem de forma desordenada e com repetições
grep -F -v -n '0.0' kk.txt >> arquivo.txt & grep -F -n 'STATE' kk.txt >> arquivo.txt

e depois usei o sort
sort -n -u arquivo.txt

Com isso consegui o resultado onde toda linha com STATE é mantida, e toda linha com 0.0 é excluida

Boa noite, ygordc.
Segue sugestão:

O arquivo texto.txt é o do seu exemplo.
---------------------------------------------------------------------------------
Com o awk, filtro as linhas com STATE e as linhas que NÃO tem "0.0"


awk '/^STATE/ || $0!~/0.0/' texto.txt
1:STATE 1: E= 0.090038 au 2.450 eV 19761.2 cm**-1
50a -> 55a : 0.132262 (c= -0.36367774)
53a -> 55a : 0.812800 (c= 0.90155409)
2:STATE 2: E= 0.110977 au 3.020 eV 24356.5 cm**-1
53a -> 54a : 0.739599 (c= -0.85999918)
3:STATE 3: E= 0.116837 au 3.179 eV 25642.7 cm**-1
48a -> 54a : 0.343012 (c= 0.58567203)
4:STATE 4: E= 0.120385 au 3.276 eV 26421.5 cm**-1
48a -> 54a : 0.330767 (c= -0.57512373)
53a -> 57a : 0.436116 (c= -0.66039051)
5:STATE 5: E= 0.126849 au 3.452 eV 27840.0 cm**-1
45a -> 64a : 0.107306 (c= -0.32757526)
46a -> 54a : 0.194725 (c= -0.44127628)
46a -> 64a : 0.119180 (c= 0.34522405)
6:STATE 6: E= 0.138585 au 3.771 eV 30415.8 cm**-1
47a -> 55a : 0.370648 (c= -0.60880833)
48a -> 63a : 0.106657 (c= -0.32658435)
50a -> 55a : 0.126825 (c= -0.35612449)
7:STATE 7: E= 0.139661 au 3.800 eV 30652.1 cm**-1
48a -> 55a : 0.417464 (c= 0.64611437)
52a -> 56a : 0.239934 (c= -0.48983064)
8:STATE 8: E= 0.140805 au 3.831 eV 30903.1 cm**-1
47a -> 55a : 0.140473 (c= 0.37479768)
53a -> 62a : 0.165506 (c= 0.40682435)
9:STATE 9: E= 0.141533 au 3.851 eV 31063.0 cm**-1
48a -> 55a : 0.432829 (c= -0.65789703)
52a -> 56a : 0.232238 (c= -0.48191118)
10:STATE 10: E= 0.142388 au 3.875 eV 31250.5 cm**-1
50a -> 60a : 0.157723 (c= -0.39714370)
51a -> 54a : 0.215728 (c= -0.46446535)
51a -> 59a : 0.166282 (c= -0.40777686)
53a -> 60a : 0.179818 (c= -0.42404935)

---------------------------------------------------------------------------------------------------------------

É isso, espero que eu tenha entendido corretamente o que deseja no resultado, e que seja útil.

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________


3. Ajuda com o comando GREP, ou algum outro comando que possa manipular arquivo de texto

Ygor Diniz Carvalhedo
ygordc

(usa Debian)

Enviado em 21/03/2022 - 14:59h


Consegui fazendo da seguinte forma

adicionei mais parametros no grep, desta forma ele gera um arquivo com todas as informações que preciso, porem de forma desordenada e com repetições
grep -F -v -n '0.0' kk.txt >> arquivo.txt & grep -F -n 'STATE' kk.txt >> arquivo.txt

e depois usei o sort
sort -n -u arquivo.txt

Com isso consegui o resultado onde toda linha com STATE é mantida, e toda linha com 0.0 é excluida




4. Re: Ajuda com o comando GREP, ou algum outro comando que possa manipular arquivo de texto [RESOLVIDO]

Ygor Diniz Carvalhedo
ygordc

(usa Debian)

Enviado em 22/03/2022 - 03:40h


msoliver escreveu:

ygordc escreveu:


Consegui fazendo da seguinte forma

adicionei mais parametros no grep, desta forma ele gera um arquivo com todas as informações que preciso, porem de forma desordenada e com repetições
grep -F -v -n '0.0' kk.txt >> arquivo.txt & grep -F -n 'STATE' kk.txt >> arquivo.txt

e depois usei o sort
sort -n -u arquivo.txt

Com isso consegui o resultado onde toda linha com STATE é mantida, e toda linha com 0.0 é excluida

Boa noite, ygordc.
Segue sugestão:

O arquivo texto.txt é o do seu exemplo.
---------------------------------------------------------------------------------
Com o awk, filtro as linhas com STATE e as linhas que NÃO tem "0.0"


awk '/^STATE/ || $0!~/0.0/' texto.txt
1:STATE 1: E= 0.090038 au 2.450 eV 19761.2 cm**-1
50a -> 55a : 0.132262 (c= -0.36367774)
53a -> 55a : 0.812800 (c= 0.90155409)
2:STATE 2: E= 0.110977 au 3.020 eV 24356.5 cm**-1
53a -> 54a : 0.739599 (c= -0.85999918)
3:STATE 3: E= 0.116837 au 3.179 eV 25642.7 cm**-1
48a -> 54a : 0.343012 (c= 0.58567203)
4:STATE 4: E= 0.120385 au 3.276 eV 26421.5 cm**-1
48a -> 54a : 0.330767 (c= -0.57512373)
53a -> 57a : 0.436116 (c= -0.66039051)
5:STATE 5: E= 0.126849 au 3.452 eV 27840.0 cm**-1
45a -> 64a : 0.107306 (c= -0.32757526)
46a -> 54a : 0.194725 (c= -0.44127628)
46a -> 64a : 0.119180 (c= 0.34522405)
6:STATE 6: E= 0.138585 au 3.771 eV 30415.8 cm**-1
47a -> 55a : 0.370648 (c= -0.60880833)
48a -> 63a : 0.106657 (c= -0.32658435)
50a -> 55a : 0.126825 (c= -0.35612449)
7:STATE 7: E= 0.139661 au 3.800 eV 30652.1 cm**-1
48a -> 55a : 0.417464 (c= 0.64611437)
52a -> 56a : 0.239934 (c= -0.48983064)
8:STATE 8: E= 0.140805 au 3.831 eV 30903.1 cm**-1
47a -> 55a : 0.140473 (c= 0.37479768)
53a -> 62a : 0.165506 (c= 0.40682435)
9:STATE 9: E= 0.141533 au 3.851 eV 31063.0 cm**-1
48a -> 55a : 0.432829 (c= -0.65789703)
52a -> 56a : 0.232238 (c= -0.48191118)
10:STATE 10: E= 0.142388 au 3.875 eV 31250.5 cm**-1
50a -> 60a : 0.157723 (c= -0.39714370)
51a -> 54a : 0.215728 (c= -0.46446535)
51a -> 59a : 0.166282 (c= -0.40777686)
53a -> 60a : 0.179818 (c= -0.42404935)

---------------------------------------------------------------------------------------------------------------

É isso, espero que eu tenha entendido corretamente o que deseja no resultado, e que seja útil.

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________


Era exatamente isso , eu tinha conseguindo usando grep e sort, porem do jeito que vc fez usando awk e expressões regulares ficou muito mais limpo o comando, parabens e obrigado !!



5. Re: Ajuda com o comando GREP, ou algum outro comando que possa manipular arquivo de texto [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/03/2022 - 17:58h


ygordc escreveu:


msoliver escreveu:

ygordc escreveu:


Consegui fazendo da seguinte forma

adicionei mais parametros no grep, desta forma ele gera um arquivo com todas as informações que preciso, porem de forma desordenada e com repetições
grep -F -v -n '0.0' kk.txt >> arquivo.txt & grep -F -n 'STATE' kk.txt >> arquivo.txt

e depois usei o sort
sort -n -u arquivo.txt

Com isso consegui o resultado onde toda linha com STATE é mantida, e toda linha com 0.0 é excluida

Boa noite, ygordc.
Segue sugestão:

O arquivo texto.txt é o do seu exemplo.
---------------------------------------------------------------------------------
Com o awk, filtro as linhas com STATE e as linhas que NÃO tem "0.0"


awk '/^STATE/ || $0!~/0.0/' texto.txt
1:STATE 1: E= 0.090038 au 2.450 eV 19761.2 cm**-1
50a -> 55a : 0.132262 (c= -0.36367774)
53a -> 55a : 0.812800 (c= 0.90155409)
2:STATE 2: E= 0.110977 au 3.020 eV 24356.5 cm**-1
53a -> 54a : 0.739599 (c= -0.85999918)
3:STATE 3: E= 0.116837 au 3.179 eV 25642.7 cm**-1
48a -> 54a : 0.343012 (c= 0.58567203)
4:STATE 4: E= 0.120385 au 3.276 eV 26421.5 cm**-1
48a -> 54a : 0.330767 (c= -0.57512373)
53a -> 57a : 0.436116 (c= -0.66039051)
5:STATE 5: E= 0.126849 au 3.452 eV 27840.0 cm**-1
45a -> 64a : 0.107306 (c= -0.32757526)
46a -> 54a : 0.194725 (c= -0.44127628)
46a -> 64a : 0.119180 (c= 0.34522405)
6:STATE 6: E= 0.138585 au 3.771 eV 30415.8 cm**-1
47a -> 55a : 0.370648 (c= -0.60880833)
48a -> 63a : 0.106657 (c= -0.32658435)
50a -> 55a : 0.126825 (c= -0.35612449)
7:STATE 7: E= 0.139661 au 3.800 eV 30652.1 cm**-1
48a -> 55a : 0.417464 (c= 0.64611437)
52a -> 56a : 0.239934 (c= -0.48983064)
8:STATE 8: E= 0.140805 au 3.831 eV 30903.1 cm**-1
47a -> 55a : 0.140473 (c= 0.37479768)
53a -> 62a : 0.165506 (c= 0.40682435)
9:STATE 9: E= 0.141533 au 3.851 eV 31063.0 cm**-1
48a -> 55a : 0.432829 (c= -0.65789703)
52a -> 56a : 0.232238 (c= -0.48191118)
10:STATE 10: E= 0.142388 au 3.875 eV 31250.5 cm**-1
50a -> 60a : 0.157723 (c= -0.39714370)
51a -> 54a : 0.215728 (c= -0.46446535)
51a -> 59a : 0.166282 (c= -0.40777686)
53a -> 60a : 0.179818 (c= -0.42404935)

---------------------------------------------------------------------------------------------------------------

É isso, espero que eu tenha entendido corretamente o que deseja no resultado, e que seja útil.

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________


Era exatamente isso , eu tinha conseguindo usando grep e sort, porem do jeito que vc fez usando awk e expressões regulares ficou muito mais limpo o comando, parabéns e obrigado !!

Boa tarde ygordc.
Obrigado pela melhor resposta... :)
Segue correção....
O . "PONTO" deve ser escapado para ser interpretado como um ponto literal, e não como um metacaractere.
awk '/^STATE/ || $0!~/0\.0/' texto.txt

Com o SED:
sed -nr '/^STATE|: 0\.[1-9]/p' texto.txt

Grep sem "pipe"
grep -e '^STATE' -e ': 0\.[1-9]' texto.txt

Outro Grep:
grep '^STATE\|: 0\.[1-9][0-9]\+' texto.txt


Ontem postei na "correria" e não me atentei a esse detalhe"

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts