com csplit
csplit -s -b %d.txt -f ABC_ Log.txt /ABC_/ {*}
Eu tenho um arquivo log.txt que contém 20k linhas. Cada linha tem números e coordenadas no plano xyz e eles são separados por conjuntos. Conjuntos podem ser identificados por nomes como ABC_1, ABC_2 e assim por diante no log.txt
A partir deste arquivo log.txt eu quero separar todos os conjuntos de dados em arquivos de texto individuais, que devem conter todos os dados do conjunto (por exemplo, ABC_1).
Meu log.txt parece com abaixo.
ABC_1:
1, (xyz coordinates)
2, (xyz coordinates)
3, (xyz coordinates)
.... Continue
ABC_2:
101, (xyz coordinates)
102, (xyz coordinates)
103, (xyz coordinates)
.... Continue
ABC_3:
201, (xyz coordinates)
202, (xyz coordinates)
203, (xyz coordinates)
.... Continue
ABC_99:
9991, (xyz coordinates)
9992, (xyz coordinates)
9993, (xyz coordinates)
.... Continue
Eu quero criar um script que possa me fornecer 99 arquivos de texto individuais de um único arquivo log.txt e que deve ser nomeado como nome de conjunto ABC_1.TXT
, ABC_2.TXT
... para ABC_99.TXT
de log.txt .
com csplit
csplit -s -b %d.txt -f ABC_ Log.txt /ABC_/ {*}
Awk
solução:
awk '/^ABC_/{
if (fn) close(fn); sub(":", "", $1);
fn = $1".txt"; next
}
{ print > fn }' Log.txt