Estoy corriendo
./script.pl 69032 text.txt
Donde contiene text.txt
1 29 239 6
Y me estoy poniendo
1 29 239 8.69162127708889e-05
Como salida pero solo quiero que el último número sea
1 29 239 .0000869162127708889
Este es mi guion
$percent=$ARGV[0];
shift;
while(<>){
my $temp = $_;
my ($num, $start, $stop, $exp) = split("t", $temp);
if( defined($exp)){
print $num,"t",$start,"t",$stop,"t",$exp/$percent,"n";
}
}
Respuestas
4 para la respuesta № 1Utilizar printf
para la impresión formateada. Los detalles de los especificadores de formato se dan en sprintf
.
printf("%dt%dt%dt%10.8fn", $num, $start, $stop, $exp/$percent);
La cuerda dentro "..."
Es donde especificas como formatear. El resto es una lista de variables que se utilizan en la cadena para cada %
Especificador, en general, en el orden en que vienen. los sprintf
devuelve una cadena, mientras printf
imprime a STDOUT
, o a otro identificador de archivo si se da como primer argumento, printf($fh "...", @vars)
. Esta es una de las herramientas más venerables, buenas y antiguas.
Arriba tenemos: un entero %d
, luego una pestaña t
, luego lo mismo dos veces más, luego un número de punto flotante que se imprimirá en el campo de ancho total 10
(incluyendo el punto decimal y un signo posible) con 8
dígitos despues del punto. Los enteros ocupan tanto espacio en la salida como necesitan - uno para 1
tres para 239
. Si desea alinear la salida, puede especificar el ancho mínimo del campo
printf("%3dt%3dt%3dt%10.8fn", $num, $start, $stop, $exp/$percent);
Ahora cada entero tomará tres espacios, alineados a la derecha. Para alinear a la izquierda usar %-3d
. Para tener ceros iniciales dices %03d
, para 001
. Las cadenas también se pueden imprimir en campos de ancho fijo, por lo que
printf("%4s %6s %6s %12sn", qw(num start stop factor));
printf("%4d %6d %6d %12.8fn", $num, $start, $stop, $exp/$percent);
huellas dactilares
factor de parada de inicio num 1 29 239 0.00008692
Arriba elegí anchos de campo para un cómodo.Diseño y espacios literales utilizados como separadores entre ellos. (Las pestañas se pueden mezclar con la alineación visual si las entradas no encajan en las tabulaciones. Lo que no tiene ningún efecto en el análisis futuro si se envía a un archivo de datos, a pesar de que tampoco hay azúcar para el análisis). Si usa comas en lugar de hace un archivo CSV.
Hay mucho, mucho más que uno puede hacer con esto. Se utiliza para cualquier cosa, desde conversiones de formato precisas a archivos de datos de impresión o informes decentes (ASCII). los sprintf
La página está detallada con muchos ejemplos.