Como imprimir um número que é divisível por 4 trabalhando para cima (enquanto loop) ou awk

2

Estou enfrentando um problema desafiador no Linux, no qual preciso imprimir um número que seja divisível por 4.

O seguinte abaixo me ajuda a imprimir um número par, mas não divisível por 4:

echo 5 | awk -F, '$0%2{$0++}1'

Saída:

6

Não tenho certeza de como fazer isso, mas talvez se eu usar um loop while para adicionar / incrementar o valor inicial até que o valor possa ser dividido por quatro e depois inserir esse valor em uma variável, que eu possa usar.

Por exemplo:

val=5
5/4=  1.25 not divisible

val=val+1
val=6
6/4=  1.5 not divisible

val=val+1
val=7
7/4=  1.75

val=val+1
val=8
8/4=2 is divisible

Uma vez que o valor é divisível por 4, ecoe o valor 8 neste exemplo para uma variável de saída, não a resposta, que é divisível por 4.

    
por Christopher Karsten 09.09.2016 / 11:59

2 respostas

4

com awk :

echo 5 | awk '{$0=int($0/4+1)*4}1'

Explicação:

  • $0/4+1 o valor é dividido por 4 e o resultado é incrementado em 1 .
  • int(n) é então arredondado pelos awks int() .
  • n*4 agora só temos que multiplicar isso com 4 para obter o próximo número mais alto divisível por 4 .
  • {...}1 the 1 no final apenas imprimirá o valor.

Isso imprimirá 16 para o valor 12 .

Se você quiser que o valor permaneça quando ele for divisível por 4 , use este awk :

awk '{$0=int($0/4+.75)*4}1'
    
por 09.09.2016 / 12:32
1
#!/bin/bash
i=5
while [ 1 ]
do
        if [ 'echo $i%4 | bc' -eq 0 ]; then
                echo $i
                exit
        else
                i='echo $i+1|bc'
        fi
done

Experimente este script com while loop

    
por 09.09.2016 / 13:58