![]() |
Hola y bienvenida de los Estados Unidos a la UNIX y Linux Foros! Gracias por su visita y formar parte de nuestra comunidad global.
|
|
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 |
| Encabezado y append Tráiler | balzzz | UNIX for Dummies Preguntas y Respuestas | 2 | 01-06-2008 08:19 AM |
| Comprobación de la cabecera y el trailer de una determinada cadena, y si no se encuentra, salir de la | er_ashu | UNIX for Dummies Preguntas y Respuestas | 2 | 11-08-2007 09:55 AM |
| Copie todos los archivos con el sello de tiempo y quitar la cabecera, el remolque de archivo | ksrams | UNIX for Dummies Preguntas y Respuestas | 35 | 07-30-2007 03:15 PM |
| Cuenta N º de registros en archivos de cabecera y sin contar Tráiler Documentos | guiguy | Programación de scripts de shell y | 2 | 06-07-2007 01:15 PM |
| combinar dos archivos de texto de entrada | d3ck_tm | AIX | 6 | 02-28-2006 11:23 PM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
Combinar los archivos de texto, mientras que la combinación de las múltiples encabezado / remolque registros en cada una.
Situación:
Nuestro sistema se ejecuta actualmente un puesto de trabajo (Programa COBOL) que genera una interfaz de archivo que se enviará a uno de nuestros proveedores. Debido a que este sistema de información para los procesos de más de 100.000 empleados / jubilados (y creciente), nos gustaría multi-hilo en el trabajo de procesamiento de grupos, a fin de reducir su tiempo de ejecución. Esto funciona bien, sin embargo, estamos frente a múltiples archivos de interfaz que deben fusionarse antes de la transferencia al vendedor. Algunos detalles sobre el archivo: El archivo generado tiene una cabecera y el registro de un remolque, y el remolque pertinente registro total de los valores (es decir, contar con los empleados, los registros aprobados, etc.) No hay separadores de campo - se trata de campos de longitud fija. Situación en detalle: Nos gustaría concatenar los archivos - que es la parte fácil. ¿Qué hace que esta difícil es que tenemos que eliminar los múltiples registros de cabecera y conservar únicamente la primera. Además, tenemos que eliminar los múltiples registros de remolque, pero tenemos que añadir todo el valor total de cada remolque en el registro de un remolque le conservar al final. Como puede inferirse tienen por ahora, he escrito algunos scripts de UNIX, pero carecen de algunos conocimientos relacionados con el registro individual y sobre el terreno de la manipulación en un archivo de texto. En particular, me gustaría saber cómo puedo definir ámbitos específicos cuando leo cada uno de los registros - estos son los campos de los registros que el remolque necesidad de mantener un total de rodadura. Además, me gustaría saber cómo puedo eliminar registros individuales. Cualquier ayuda será muy apreciada. |
|
||||
|
Usted no da suficiente información para construir una correcta secuencia de comandos
Necesitamos una línea de cabecera muestra un ejemplo de línea de datos y una muestra remolque línea. |
|
||||
|
Ejemplo de archivo
Cita:
LOTE HEADER PRO 0724200808042008 01E000036841 LEAD05151948F 51498 10012007 YYY 02E000036841 ME 04161988F 10012007 01E000060640 MDGV12251951F 51498 1001200709302008YYY 02E000060640 RD 05061941M 1001200709302008 01E000025850 LDUO06081956F 51498 1001200709302008YYY 02E000025850 ED 10071937M 1001200709302008 01E029009859 DUA05021960F 51498 10012007 YYY 02E029009859 LD 03101989F 10012007 02E029009859 LD 02041997M 10012007 01E034008379 AEUA09181965F 51498 10012007 YYY 02E034008379 NE 11131991F 10012007 02E034008379 RE 01131993F 10012007 02E034008379 EE 09191959M 10012007 01E045005523 EUA02131964M 51498 10012007 YNN 01E046004280 DUA12041947M 51498 10012007 YYY 02E046004280 D 12121953F 10012007 02E046004280 KE 09211986M 10012007 01E048005119 BDUA01301961F 51498 10012007 YNN 01E055002147 LDUA10011964F 51498 10012007 YYY 02E055002147 RD 11121966M 10012007 02E055002147 ND 02131997F 10012007 02E055002147 JD 03111992M 10012007 01E057008796 SEUA12061975F 51498 10012007 YYY TRAILER DE LOTE 000001150000019908042008 Detalles sobre el Registro de Remolque: el 00000115 es un valor total (número de empleados), el 00000199 es el total de los registros procesados (los empleados y dependientes). Los dos campos que había necesidad de mantener un total de móvil para todos los archivos que se fusionan. El detalle sobre los registros son de 300 caracteres de ancho (irrelevante para lo que tenemos que hacer, pero pensé que incluirlo). Gracias! |
|
||||
|
asumir esto: es un empleado 01E000036841 id y los archivos se nombran <algo>. dat
Código:
ls *.dat | read header dummy
# save copies of header
head -1 $header > tmp
awk '{ if (index($0, "HEADER") > 0 || index($0, "TRAILER") >0 ) {last= $0; continue}
arr[$0]++; print $0 }
END { for (i in arr)
{
empcnt++
lc+=arr[i]
}
print empcnt, lc > "cntfile" } ' *.dat >> tmp
awk ' { rec=sprintf("%08d%08d", $1 $2)}
END { printf("BATCH TRAILER %s%s\n", rec, substr(last, length(last)-7) } ' cntfile >> tmp
mv tmp employee.dat
|
|
||||
|
hola a continuación perl puede ayudar un poco
uso: perl NUM a.pl archivo1 archivo2 [aquí NUM indicar cuántas líneas será encabezado] Código:
a: ***** line 1 line 2 1 2 3 4 5 Código:
b: ***** line 3 line 4 9 8 7 6 5 Código:
***** line 1 line 2 line 3 line 4 10 10 10 10 10 Código:
$header=shift;
undef $/;
my(@head,@body,@foot);
while($file=shift){
open FH,"<$file" or die "Can not open file $_";
my $str=<FH>;
close FH;
my @temp=split("\n",$str);
for( my $i=0;$i<$header;$i++){
push @head,$temp[$i] if ($#head<$header-1);
}
for(my $j=$header;$j<$#temp;$j++){
push @body,$temp[$j];
}
my @footer = split(" ",$temp[$#temp]);
for($k=0;$k<=$#footer;$k++){
$foot[$k]=$foot[$k]+$footer[$k];
}
}
print join "\n",@head;
print "\n",join "\n",@body;
print "\n",join " ",@foot;
|
![]() |
| Marcadores |
| Etiquetas |
| perl, perl cambio, turno, cambio de perl |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|