dividir un archivo con líneas separadas por pestañas en dos archivos

dividir un archivo con líneas separadas por pestañas en dos archivos

¿Cómo podría usar algo como seddividir un archivo en dos para que el archivo que contiene

eric    shwartz
david    snyder

donde los 4 espacios entre las entradas son en realidad pestañas en dos archivos como por ejemplo:

file1:

eric
david

file2:

shwartz
snyder

Entonces coloca todo después de la pestaña en cada línea en otro archivo.

Respuesta1

Una solución podría ser:

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

Respuesta2

¿Tiene que ser un guión? Si no, puedes hacer esto:

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

cutselecciona una columna (por defecto separada por tabulación). -f es una bandera que toma un número como argumento, y este número es un número de columna.

Respuesta3

No creo que pueda ser más simple que elawkacercarse,Así que aquí tienes una solución Perl que funciona para cualquier número de columnas, guardando cada una en su propio archivo:

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 un archivo 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

El script anterior creará archivos, file1cada file4uno de los cuales contendrá la columna correspondiente.


Por supuesto, puedes hacer exactamente lo mismo en awk, de forma mucho más sencilla y elegante, pero ¿qué tiene eso de divertido?

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

Respuesta4

moreutils (disponible en muchos repositorios de distribución, ohttp://joeyh.name/code/moreutils/) tiene algunas utilidades útiles, una de las cuales ayuda aquí:

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

información relacionada