
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
AWK
solução:
awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
!a[$2]++
- verifica se há um valor exclusivo do segundo campo$2
utilizando-o como um índice do arraya
. A condição!a[$2]++
será avaliadatrue
apenas na 1ª ocorrência de$2
valor únicofn="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