![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| 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 |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo |
Calificación:
|
Modos de visualización |
|
|
|
||||
|
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? |
|
||||
|
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 |
|
||||
|
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 |
|
|||||
|
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 > |
|
||||
|
¿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 |
|
||||
|
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.
|
![]() |
| Marcadores |
| Etiquetas |
| dividido por el número de línea, dividir a los archivos |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|