dividindo um arquivo em vários arquivos usando comandos shell

dividindo um arquivo em vários arquivos usando comandos shell

Quero dividir meu arquivo em vários arquivos.

Abaixo está o arquivo que tenho.

sort a # 3|4
sort a # 2|5
sort b # 1|2
sort b # 2|5

Quero que o arquivo seja separado abaixo

arquivo1

sort a # 3|4
sort a # 2|5

arquivo2

sort b # 1|2
sort b # 2|5

Como você pode ver, eu os dividi com base na segunda coluna. Como tenho muitos valores diferentes para a coluna dois, leva muito tempo para dividir o arquivo de maneira trabalhosa. Como conseguir esse problema?

Responder1

AWKsolução:

awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
  • !a[$2]++- verifica se há um valor exclusivo do segundo campo $2utilizando-o como um índice do array a. A condição !a[$2]++será avaliada trueapenas na 1ª ocorrência de $2valor único
  • fn="file"++c- gerandonome do arquivocom sufixo incremental++c

Visualizando resultados:

$ head file[12]
==> file1 <==
sort a # 3|4
sort a # 2|5

==> file2 <==
sort b # 1|2
sort b # 2|5

Responder2

split -l 2 test

Isso irá gerar 2 arquivos divididos. Saída de arquivos divididos:

$ cat xaa
sort a # 3|4
sort a # 2|5
$ cat xab
sort b # 1|2
sort b # 2|5

informação relacionada