Como eu poderia usar algo como sed
dividir 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
cut
seleciona 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 oawk
abordagem,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 file1
através file4
de 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