eu estou correndo
./script.pl 69032 text.txt
Onde text.txt contém
1 29 239 6
E eu estou ficando
1 29 239 8.69162127708889e-05
Como saída, mas eu só quero que o último número seja
1 29 239 .0000869162127708889
Este é meu roteiro
$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";
}
}
Respostas:
4 para resposta № 1Usar printf
para impressão formatada. Os detalhes dos especificadores de formato são fornecidos em sprintf
.
printf("%dt%dt%dt%10.8fn", $num, $start, $stop, $exp/$percent);
A corda dentro "..."
é onde você especifica como formatar. O restante é uma lista de variáveis que são usadas na string para cada %
especificador, em geral na ordem em que eles vêm. o sprintf
retorna uma string, enquanto printf
imprime para STDOUT
ou para outro manipulador de arquivo, se fornecido como o primeiro argumento, printf($fh "...", @vars)
. Esta é uma das ferramentas mais antigas e mais veneráveis.
Acima temos: um inteiro %d
, então uma guia t
, as mesmas duas vezes mais e, em seguida, um número de ponto flutuante a ser impresso no campo de largura total 10
(incluindo o ponto decimal e um possível sinal) com 8
dígitos após o ponto. Os números inteiros ocupam o espaço necessário na saída - um para 1
três para 239
. Se você deseja alinhar a saída, pode especificar a largura mínima do campo
printf("%3dt%3dt%3dt%10.8fn", $num, $start, $stop, $exp/$percent);
Agora cada número inteiro ocupará três espaços, alinhados à direita. Para alinhar à esquerda, use %-3d
. Para ter zeros à esquerda, você diria %03d
, para 001
. As strings também podem ser impressas em campos de largura fixa,
printf("%4s %6s %6s %12sn", qw(num start stop factor));
printf("%4d %6d %6d %12.8fn", $num, $start, $stop, $exp/$percent);
impressões
num fator de parada inicial 1 29 239 0,00008692
Acima, escolhi as larguras dos campos para umalayout e usou espaços literais como separadores entre eles. (As guias podem interferir no alinhamento visual se as entradas não couberem nas paradas de tabulação. O que não tem efeito na análise futura se for para um arquivo de dados, mesmo que elas também não sejam importantes para a análise.) Se você usar vírgulas, isso também cria um arquivo CSV.
Há muito, muito mais que se pode fazer com isso. É usado para qualquer coisa, desde conversões precisas de formato até impressão de arquivos de dados ou relatórios decentes (ASCII). o sprintf
A página é detalhada com muitos exemplos.