dividindo um arquivo com linhas separadas por tabulações em dois arquivos

dividindo um arquivo com linhas separadas por tabulações em dois arquivos

Como eu poderia usar algo como seddividir um arquivo em dois para que o arquivo que contém

eric    shwartz
david    snyder

onde os 4 espaços entre as entradas são, na verdade, tabulações em dois arquivos, como:

file1:

eric
david

file2:

shwartz
snyder

Então ele coloca tudo após a tabulação de cada linha em outro arquivo.

Responder1

Uma solução poderia ser:

awk '{ print $1 > "file1"; print $2 > "file2"}' file 

Responder2

Tem que ser um script? Se não, você poderia fazer isso:

cut -f 1 file > file1
cut -f 2 file > file2

cutseleciona uma coluna (por padrão separada por tabulação). -f é um sinalizador que aceita um número como argumento, e esse número é um número de coluna.

Responder3

Eu não acho que possa ser mais simples do que oawkabordagem,então aqui está uma solução Perl que funciona para qualquer número de colunas, salvando cada uma em seu próprio arquivo:

perl -ane 'unless($handles[0]){
            for(1..$#F+1){
                open(my $fh, ">","file$_"); 
                $handles[$_-1] = $fh
            }
           } 
           for my $i (0..$#F){
                print { $handles[$i] } "$F[$i]\n"
           }' file 

Dado um arquivo de entrada como este:

$ cat file
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad

O script acima criará arquivos file1através file4de cada um deles contendo a coluna relevante.


Claro, você pode fazer exatamente a mesma coisa awk, com muito mais simplicidade e elegância, mas onde está a diversão nisso?

awk '{for(i=1;i<=NF;i++){print $i > "file"i}}' file 

Responder4

moreutils (disponível em muitos repositórios de distribuição ouhttp://joeyh.name/code/moreutils/) tem alguns utilitários úteis, um dos quais ajuda aqui:

pee 'cut -f1 >file1' 'cut -f2 >file2' < file

informação relacionada