¿Cómo podría usar algo como sed
dividir 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
cut
selecciona 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 elawk
acercarse,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, file1
cada file4
uno 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