saviounix 
		 
		(usa Debian)
		 
		Enviado em 15/10/2016 - 21:12h 
		flavio_olimpo escreveu: 
 
Boa tarde pessoal,  
 
Pessoal eu preciso pegar uma string especifica.  
 
Exemplifico:  
 
!     R5      R(5,6)                  0.9939         calculate D2E/DX2 analytically 
 
eu preciso pegar o número "0.9939" ( esse valor é so para o 1° arquivo, eu tenho mais de 300 arquivos) só que nem sempre ele está na 4° coluna, mas sempre ele está a frente da seguinte string "R(5,6)"  
devido a isso eu queria um comando que sempre pegasse o número que estivesse em seguida da string que citei anteriormente. eu uso o seguinte comando, porém fica arquivos em branco que esse valor não está na 4 coluna:  
 
for y in 3-21g 6-31g 6-31ga 6-311++gaa 6-311+ga 6-31+ga 6311dfg 6-31+g 6-311+g 6-311g aug-cc-pvdz aug-cc-pvtz aug-cc-pvqz; do  
     cat "TS2_"umpw3pbe"_"$y".out" | grep "R(5,6)" | awk '{print $4}' | sed -e '1,3d' >> "TS2_"$y".txt"  
done 
 
Alguém pode me ajudar?  
 
Grato 
 
Boa Noite FLAVIO_OLIMPO,
Pelo que pude compreender da sua dúvida, é que deseja ler diversos arquivos ".out" e procurar neles uma palavra específica. 
Atribuir cada ocorrência em um segundo arquivo com padrão "TS2_"<nomeoriginal>".txt".
Diante disso, criei um comando que talvez resolva seu problema da forma que pediu.
Porém, é necessário um certo ajuste no diretório para que tudo funcione como o esperado.
Todos os arquivos precisam estar no mesmo diretório da execução do comando a seguir:
Comando: 
    for i in `find ./*.out -type f -exec grep -l "R(5,6)" {} \; | awk -F".out" '{print(substr($1,3))}'`; do grep 'R(5,6)' $i".out" | sed 's/^.*R(5,6)\s\?\([0-9.]\+\).*/\1/' >> "TS2_"$i".txt"; done   
Explicando: 
find ./*.out -type f -exec grep -l "R(5,6)" {} \;  
Retornará o nome de cada arquivo com o padrão "R(5,6)",precedido de "./"
Ex: "./Teste.out"
_______________________________________________________
awk -F".out" '{print(substr($1,3))}'  
Receberá o retorno  do comando 'find+grep' e, utilizando o programa 'AWK', retornará apenas o nome do arquivo (sem o "./" e sem ".out")
Ex: "Teste"
_______________________________________________________
grep 'R(5,6)' $i".out" | sed 's/^.*R(5,6)\s\?\([0-9.]\+\).*/\1/'  
A cada arquivo lido pelo comando usado no programa 'for', será procurado e exibido apenas as linhas que contém o padrão "R(5,6)".
Cada umas destas linhas, retornadas pelo programa 'grep', serão filtradas pelo programa 'sed' em busca da string que sucede o padrão especificado.
Ex: 
grep retornará                          ------>  "!     R5      R(5,6)                  0.9939         calculate D2E/DX2 analytically"
sed filtrará o texto e retornará  ------>  "0.9939"
_______________________________________________________
>> "TS2_"$i".txt"  
Atribuirá as strings encontradas em um novo arquivo com extensão ".txt", usando o padrão de nomes descrito.
Ex: "TS2_Teste.txt"
Vale lembrar que o comando 'sed', descrito acima, foi criado anteriormente pelo nosso amigo ALANVICTORJP. Apenas aproveitei a solução proposta por ele e complementei para ir direto ao foco do seu problema.
Espero ter ajudado em algo, 
Até mais ;D
Savio