The UNIX and Linux Forums  

Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de scripts de shell y
.
google unix.com



Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí.

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
sobre la base de dividir el número de caracteres chriss_58 Programación de scripts de shell y 6 07-06-2008 11:05 AM
Dividir un archivo basado en patrones en awk, grep, sed o perl kumarn Programación de scripts de shell y 5 06-20-2008 11:51 AM
Dividir un archivo sin patrón - Split, Csplit, Awk madhunk UNIX for Dummies Preguntas y Respuestas 10 12-17-2007 12:57 PM
la extracción de una línea basada en el número de línea narendra.pant Programación de scripts de shell y 2 09-20-2007 06:00 AM
awk script para dividir un archivo basado en la condición superprogrammer Programación de scripts de shell y 12 06-14-2005 04:59 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback vínculo Herramientas de hilo Buscar en este Hilo Calificación: Thread Rating: 2 votes, 4.50 average. Modos de visualización
  #1 (Enlace permanente)  
Old 09-30-2008
shankster shankster is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Publicaciones: 3
Split File Sobre la base de la línea de patrones

Hola a todos.

Lo siento, sé que esta cuestión es similar a muchos otros, pero me parece que sólo puede reunir exactamente lo que necesito.

Mi archivo es ficha delimitted y contiene alrededor de 1 millón de filas. Quisiera enviar líneas 1,4, y 7 a un archivo. Líneas 2, 5, y 8 a un segundo archivo. Líneas 3, 6, y 9 a un tercer archivo, y luego la línea 10 a un cuarto de archivo. Entonces desea repetir esta condición con el mismo escenario, y los mismos cuatro archivos de arriba. Alguna idea sobre el mejor enfoque?
  #2 (Enlace permanente)  
Old 09-30-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Fecha: diciembre 2007
Ubicación: Casa de 17-veces campeón mundial de Boston Celtics
Puestos: 1.311
Cool Tengo un inicio en este

Pero, voy a necesitar ayuda awk (o pensar un poco más clara después de comer el almuerzo)


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

Lo que inicialmente no se escribió el archivo de captura de línea de texto - y que creo que necesito ayuda!

Código:
> cat -n big_file4 | awk '{printf "%1s %-15s \n", substr($1,length($1),1), $2}'
1 a               
2 b               
3 c               
4 a               
5 b               
6 c               
7 a               
8 b               
9 c               
0 d               
1 a               
2 b               
3 c               
4 a               
5 b               
6 c               
7 a               
8 b               
9 c               
0 d

Porque desde aquí, mi teoría es que


Código:
grep "^[147] " <infile >outfile_a
grep "^[258] " <infile >outfile_b
grep "^[369] " <infile >outfile_c
grep "^[0] " <infile >outfile_d

Posible que tenga que cortar antes de escribir a cada salida.
  #3 (Enlace permanente)  
Old 09-30-2008
época era is offline Forum Advisor  
Pastor de Gatos Inútil (en año sabático)
  
 

Fecha: marzo 2008
Ubicación: / hay / es / sólo / bin / sh
Puestos: 3.652
Perl Python o recorrer una serie de archivos parece como el más eficiente i. Para una solución más peatonal, ejecutar un script de awk en cuatro ocasiones con diferentes parámetros podría ser aceptable, incluso si el archivo es grande.

¿Tiene el archivo sólo contiene cuatro de cada diez y, a continuación, 11, 14, y 17 de ir a la primera archivo de nuevo?


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 $!'

csplit tiene algunas opciones bastante versátil, que puede ser capaz de tirar todo esto simplemente con una adecuada csplit patrón también.

Editado por última época; al 09-30-2008 01:56 PM.. Motivo: csplit nota
  #4 (Enlace permanente)  
Old 09-30-2008
shankster shankster is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Publicaciones: 3
Sí, 11,14, y 17 se vaya al primer archivo de nuevo.

Estoy tratando de utilizar KSH para completar esta tarea. Que figura a continuación es lo que tengo hasta ahora, pero el contar con la variable no parece ser de reajuste a 1 después de que alcanza 11. Además, tengo una salida similar a:

File_split_DC.sh [42]: 2: No se ha encontrado.
File_split_DC.sh [42]: 3: No se ha encontrado.
File_split_DC.sh [42]: 4: No se ha encontrado.

El nombre de mi escritura es "File_split_DC.sh"

#! / usr / bin / ksh

count \u003d 1

mientras que leer línea
hacer

$ contar en caso
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))

en caso de contar-gt $ 10, entonces
count \u003d 1

fi
hecho <My_Test.txt

exit 0
  #5 (Enlace permanente)  
Old 09-30-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Fecha: diciembre 2007
Ubicación: Casa de 17-veces campeón mundial de Boston Celtics
Puestos: 1.311
Wink ¿qué hay de esto?


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

y ahora los cuatro archivos separados

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                                                                             
>

  #6 (Enlace permanente)  
Old 09-30-2008
época era is offline Forum Advisor  
Pastor de Gatos Inútil (en año sabático)
  
 

Fecha: marzo 2008
Ubicación: / hay / es / sólo / bin / sh
Puestos: 3.652
¿Quieres


Código:
if [ $count -gt 10 ]; then

Sería más eficiente para abrir cuatro descriptores de ficheros de impresión y, a continuación, sólo a los descriptores, lo que se aproxima a la Perl enfoque que se ha propuesto.


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

Tenga en cuenta el uso de imprimir en lugar de eco - Esto es ksh específica, pero distinta de la que, este script debe ser portátil.

Editado por última época; al 09-30-2008 02:15 PM.. Motivo: Nota de impresión vs eco
  #7 (Enlace permanente)  
Old 09-30-2008
shankster shankster is offline
Usuario Registrado
  
 

Fecha: Sep 2008
Publicaciones: 3
Gracias a ambos por su aportación. Realmente no sé lo que estoy haciendo cuando se trata de UNIX, por lo que acabo de intentar pieza cositas juntos. Terminé usando el enfoque del EEI en el segundo anuncio. Es similar a lo que ya había elaborado, y tiene sentido. JOEYG, estoy seguro de que su appraoch funcione tan bien, y le agradezco su aportación.
Closed Thread

Marcadores

Etiquetas
dividido por el número de línea, dividir a los archivos

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 10:32 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0