![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| dividir com base no número de caracteres | chriss_58 | Programação Shell Script e | 6 | 07-06-2008 11:05 |
| Dividir um arquivo baseado no padrão em awk, grep, sed ou perl | kumarn | Programação Shell Script e | 5 | 06-20-2008 11:51 |
| Dividir um arquivo com nenhum padrão - Split, Csplit, Awk | madhunk | UNIX para Dummies Perguntas & Respostas | 10 | 12-17-2007 12:57 |
| extrair uma linha baseada em linha | narendra.pant | Programação Shell Script e | 2 | 09-20-2007 06:00 |
| awk script para dividir um arquivo com base na condição | superprogrammer | Programação Shell Script e | 12 | 06-14-2005 04:59 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread |
Avaliação:
|
Display Modes |
|
|
|
||||
|
Split File Baseada em Linha Número Padrão
Olá todos.
Desculpe, eu sei essa pergunta é semelhante a muitos outros, mas eu só posso parecem juntos exatamente o que eu preciso. O meu arquivo é delimitted guia e contém cerca de 1 milhão de linhas. Gostaria de enviar linhas 1,4, e 7 para um arquivo. Linhas 2, 5, & 8 para um segundo arquivo. As linhas 3, 6, e 9 para um terceiro arquivo e, em seguida, linha 10 para quarto arquivo. Então, quero repetir essa condição, utilizando o mesmo cenário, e os mesmos quatro arquivos acima. Qualquer reflexão sobre a melhor abordagem? |
|
||||
|
Perl ou Python looping ao longo de um conjunto de file handles afigura como a mais eficiente i abordagem. Para uma solução mais pedestre, um awk script executado quatro vezes com diferentes parâmetros poderia ser aceitável, mesmo se o arquivo for grande.
O arquivo contém apenas quatro cada dez linhas e, em seguida, 11, 14 e 17 vão para o primeiro arquivo novamente? Código:
perl -MIO::File -ne 'BEGIN { map { $file[$_] = IO::File->new(">file$_") || die $!} 0..3;
@m = (0, 1, 2, 0, 1, 2, 0, 1, 2, 3);
}
$file[$m[$. % 9]]->print || die $!'
Última edição por época; em 09/30/2008 01:56.. Motivo: csplit nota |
|
||||
|
Sim, 11,14 e 17, então vá para o primeiro arquivo novamente.
Estou tentando usar ksh para concluir esta tarefa. Abaixo está o que tenho até agora, mas a contagem variável parece não estar a repor a 1 depois de chegar 11. Além disso, estou obtendo resultados semelhantes para: File_split_DC.sh [42]: 2: não foi encontrado. File_split_DC.sh [42]: 3: não foi encontrado. File_split_DC.sh [42]: 4: não foi encontrado. O nome do meu script é "File_split_DC.sh" #! / usr / bin / ksh count \u003d 1 enquanto lê linha fazer no caso $ count 1) echo "$ line">> RT1.txt ; 2) echo "$ line">> RT2.txt ; 3) echo "$ line">> RT3.txt ; 4) echo "$ line">> RT1.txt ; 5) echo "$ line">> RT2.txt ; 6) echo "$ line">> RT3.txt ; 7) echo "$ line">> RT1.txt ; 8) echo "$ line">> RT2.txt ; 9) echo "$ line">> RT3.txt ; 10) echo "$ line">> RT4.txt ; esac ((Count + \u003d 1)) se $ count-gt 10, então count \u003d 1 fi feito <My_Test.txt exit 0 |
|
|||||
|
Código:
> cat -n big_file4 | awk '{printf "%1s %-100s \n", substr($1,length($1),1), $0}' | cut -c1,10- | grep "^[147]" | cut -c2- >filea
> cat -n big_file4 | awk '{printf "%1s %-100s \n", substr($1,length($1),1), $0}' | cut -c1,10- | grep "^[258]" | cut -c2- >fileb
> cat -n big_file4 | awk '{printf "%1s %-100s \n", substr($1,length($1),1), $0}' | cut -c1,10- | grep "^[369]" | cut -c2- >filec
> cat -n big_file4 | awk '{printf "%1s %-100s \n", substr($1,length($1),1), $0}' | cut -c1,10- | grep "^[0]" | cut -c2- >filed
Código:
> cat big_file4 a stuff to 1 file b stuff to 2 file c stuff to 3 file a stuff to 1 file b stuff to 2 file c stuff to 3 file a stuff to 1 file b stuff to 2 file c stuff to 3 file d stuff to 4 file a stuff to 1 file b stuff to 2 file c stuff to 3 file a stuff to 1 file b stuff to 2 file c stuff to 3 file a stuff to 1 file b stuff to 2 file c stuff to 3 file d stuff to 4 file Código:
> cat filea a stuff to 1 file a stuff to 1 file a stuff to 1 file a stuff to 1 file a stuff to 1 file a stuff to 1 file > cat fileb b stuff to 2 file b stuff to 2 file b stuff to 2 file b stuff to 2 file b stuff to 2 file b stuff to 2 file > cat filec c stuff to 3 file c stuff to 3 file c stuff to 3 file c stuff to 3 file c stuff to 3 file c stuff to 3 file > cat filed d stuff to 4 file d stuff to 4 file > |
|
||||
|
Você quer
Código:
if [ $count -gt 10 ]; then Código:
exec 1>rt1.txt 2>rt2.txt 3>rt3.txt 4>rt4.txt
count=1
while read line; do
case $count in
1|4|7) print "$line" >&1;;
2|5|8) print "$line" >&2;;
3|6|9) print "$line" >&3;;
10) print "$line" >&4; count=0;;
esac
count=`expr $count + 1`
done <My_Test.txt
Última edição por época; em 09/30/2008 02:15.. Motivo: Nota imprimir vs echo |
|
||||
|
Graças a tanto de você para a sua entrada. Eu realmente não sei o que estou fazendo, quando se trata de UNIX, para que eu tente peça tidbits juntos. Acabei usando a abordagem da EEI na segunda colocação. Foi semelhante ao que eu já tinha colocado em conjunto, e faz sentido. JOEYG, eu tenho certeza que a sua abordagem iria funcionar tão bem, e eu aprecio o seu contributo.
|
![]() |
| Marcadores |
| Tags |
| dividida pelo número linha, split para arquivos |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|