![]() |
|
|
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 |
| cómo convertir archivos de longitud fija de archivo delimitado. | satyam_sat | Programación de scripts de shell y | 7 | 04-03-2008 03:41 AM |
| Conversión de un archivo delimitado de ancho fijo a archivo | raghavan.aero | Programación de scripts de shell y | 2 | 06-06-2007 03:44 PM |
| convertir el archivo XML en el archivo de texto (de longitud fija) | ram2s2001 | Programación de scripts de shell y | 0 | 11-03-2005 01:28 AM |
| Delimitado para convertir longitud fija | nelson553011 | Programación de scripts de shell y | 14 | 10-27-2005 05:04 PM |
| cómo puede cambiar la longitud udp? | Vvlad | Redes IP | 4 | 08-14-2003 08:37 AM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
¿Se puede convertir un '|' en un archivo de longitud fija?
Hi All,
Tengo una tubería separados file.But plana a menudo hay un problema con el records.So es posible convertir el '|' separados en un archivo de longitud fija de archivos por medio de una secuencia de comandos. El archivo tiene 11 columnas, lo que significa 10 pipes.Your ayuda es apreciada. Estoy utilizando Sun OS Versión 5.10 Gracias, Kumar |
|
||||
|
Como "campos" en el archivo están separados por un carácter constante ("|") uso cortar para separarlas, a continuación, a través de las líneas de impresión printf (i Kornshell asumir aquí, el uso "eco" en lugar de "imprimir" si usted está utilizando otra cosa): Código:
cat infile | while read line ; do
# split each input line to fields and catch these in variables
field1="$(print - "$line" | cut -d'|' -f1)"
field2="$(print - "$line" | cut -d'|' -f2)"
field3="$(print - "$line" | cut -d'|' -f3)"
.....
# after you are done with the line print it out again
# i assume here that the first column should be 20 chars wide, the next
# two 15, and so on. see the second example below.
printf '%20s %15s %15s [...]\n' "$field1" "field2" "$field3" [...] >> outfile
done
Se trata de utilizar (un número fijo de) las columnas de ancho fijo y tienes que saber el ancho de antelación. Es posible crear dinámicamente columnas con formato, pero usted tendrá que leer el infile dos veces: Código:
maxlength1=0
maxlength2=0
....
cat infile | while read line ; do
# in the first run we split and get the max width for each column
field1="$(print - "$line" | cut -d'|' -f1)"
length1=$(print - "$field1" | wc -c)
if [ $length1 -gt $maxlength1 ] ; then
maxlength1=$length1
fi
field2="$(print - "$line" | cut -d'|' -f2)"
length2=$(print - "$field2" | wc -c)
if [ $length2 -gt $maxlength2 ] ; then
maxlength2=$length1
fi
.....
done
# put together the output template for printf
template='%'"$maxlength1"'s %"'$maxlength2"'s [.....]\n'
cat infile | while read line ; do
# in the second run we split again and print using the found widths
field1="$(print - "$line" | cut -d'|' -f1)"
field2="$(print - "$line" | cut -d'|' -f2)"
....
printf "$template" "$field1" "field2" "$field3" [...] >> outfile
done
Me sugieren que el uso (dinámica) en lugar de conjuntos de variables numeradas para que el script para poder hacer frente a un número variable de campos en el archivo de entrada como un nuevo refuerzo. La columna de separación podrían ser proporcionados como un parámetro de la secuencia de comandos de lo más ampliamente utilizables como sea posible. Bakunin |
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|