dividindo um arquivo em vários arquivos usando comandos shell

2

Eu quero dividir meu arquivo em vários arquivos.

Abaixo está o arquivo que eu tenho.

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

Eu quero que o arquivo seja separado em

file1

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. Desde que eu tenho muitos valores diferentes para a coluna dois, leva muito tempo para dividir o arquivo de forma laboriosa. Como conseguir este problema?

    
por sclee1 19.11.2017 / 22:14

2 respostas

2

AWK solução:

awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
  • !a[$2]++ - verifique se encontrou o segundo valor de campo exclusivo $2 utilizando-o como um índice da matriz a . A condição !a[$2]++ será avaliada como true apenas na primeira ocorrência do valor exclusivo $2
  • fn="file"++c - gerando nome do arquivo com o sufixo de incremento ++c

Visualizando resultados:

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

==> file2 <==
sort b # 1|2
sort b # 2|5
    
por 19.11.2017 / 22:20
-1
split -l 2 test

Isso 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
    
por 20.11.2017 / 03:42

Tags