Script para mesclar uma linha específica de vários arquivos .txt em um arquivo .txt

1

Eu tenho ~ 800 arquivos .txt. Preciso extrair o nome de cada arquivo e uma linha dentro do arquivo e exportá-lo para um novo arquivo .txt.

A linha que eu preciso copiar sempre começará com "System Boot Time:"

Eu gostaria que ele saísse dentro do novo arquivo .txt, algo como isto:

txtfile1

Tempo de inicialização do sistema: xx / xx / xxxx

txtfile2

Tempo de inicialização do sistema: xx / xx / xxxx

txtfile3

Tempo de inicialização do sistema: xx / xx / xxxx

etc ...

Quais comandos posso usar para fazer isso?

Snugglasaurus
fonte
Além disso, você não nos informou qual sistema operacional e linguagem de script você está usando.
DavidPostill
Eu estou usando o windows 7 e escrever um script .bat
Snugglasaurus
for /f, dir, findstr, echoDeve começar.
DavidPostill
Um índice AZ da linha de comando do Windows CMD - uma excelente referência para todos os itens relacionados à linha de cmd do Windows.
DavidPostill
Obrigado! É difícil saber o que procurar quando você é muito novo em scripts. Sabemos o que queremos em inglês simples, mas é difícil traduzi-lo para o script-speak.
Snugglasaurus 03/03

Respostas:

0

Preciso extrair o nome de cada arquivo e uma linha dentro do arquivo e exportá-lo para um novo arquivo .txt.

A linha que eu preciso copiar sempre começará com System Boot Time:

Eu gostaria que ele saísse dentro do novo arquivo .txt, algo como isto:

txtfile1
System Boot Time: xx/xx/xxxx
txtfile2
System Boot Time: xx/xx/xxxx
txtfile3
System Boot Time: xx/xx/xxxx

Use o seguinte arquivo em lotes.

Merge.cmd:

@echo off
setlocal 
for /f "useback delims=: tokens=1-3" %%i in (`findstr /C:"System Boot Time:" "*.txt"`) do (
  echo %%i >> new.txt
  echo %%j:%%k >> new.txt
)
endlocal

Exemplo de saída:

F:\test>type ?.txt

1.txt


System Boot Time: 01/01/1900

2.txt


System Boot Time: 01/02/2003

3.txt


System Boot Time: 02/03/2004

F:\test>merge

F:\test>type new.txt
1.txt
System Boot Time: 01/01/1900
2.txt
System Boot Time: 01/02/2003
3.txt
System Boot Time: 02/03/2004

Notas:

  • Todos os arquivos correspondentes *.txtsão pesquisados ​​em busca de uma sequência correspondente ao `Tempo de inicialização do sistema
  • Os resultados são emitidos para new.txt
  • Se você deseja executar Merge.cmdvárias vezes, lembre-se del new.txtprimeiro.

Leitura adicional

DavidPostill
fonte
Uau! Isso é ótimo. Muito obrigado - você fez muito melhor do que minhas lamentáveis ​​tentativas. Uma pergunta - o arquivo new.txt está retornando todas as linhas que contêm qualquer uma das palavras "Sistema", "Inicialização" ou "hora". Existe uma maneira de fazê-lo corresponder à string inteira? Obrigado!
Snugglasaurus 03/03
0
  • Você pode usar sedou até mesmo grepgerar uma linha a partir de um arquivo de texto.

    (ah, vejo que você está no Windows. Se você não possui grepou sedinstala, poderá usar findstr.)

  • Coloque esse comando em um loop sobre os arquivos necessários.
  • Redirecione a saída para um arquivo.
pirocrasty
fonte