Digamos que você tenha dados com quantidades em formato legível por humanos, como a saída de du -h
, e deseje continuar operando com esses números. Digamos que você deseja canalizar seus dados através do grep para fazer uma soma de um subconjunto desses dados. Você faz isso ad-hoc em muitos sistemas que você nunca viu antes e possui apenas utilitários mínimos. Você deseja conversões de sufixo para todos os sufixos padrão de 10 ^ n.
Existe um utilitário gnu-linux para converter os números com sufixo em números reais dentro de um pipeline? Você tem uma função bash escrita para fazer isso, ou algum perl que pode ser fácil de lembrar, em vez de várias substituições de expressões regulares ou várias etapas sed?
38M /var/crazyface/courses/200909-90147
2.7M /var/crazyface/courses/200909-90157
1.1M /var/crazyface/courses/200909-90159
385M /var/crazyface/courses/200909-90161
1.3M /var/crazyface/courses/200909-90169
376M /var/crazyface/courses/200907-90171
8.0K /var/crazyface/courses/200907-90173
668K /var/crazyface/courses/200907-90175
564M /var/crazyface/courses/200907-90178
4.0K /var/crazyface/courses/200907-90179
| grep 200907 | <amazing suffix conversion> | awk '{s+=$1} END {print s}'
Referências relevantes:
/200907/
na frente do seu código por linha, por exemploawk '/200907/{s+=$1} END {print s}'
Respostas:
Com base na minha resposta em uma das perguntas às quais você vinculou:
Outro método usado:
fonte
sed
comando na minha resposta, você adicionaria cláusulas para lidar com sufixos SI adicionais, como mostro noawk
comando.s/T/ * 1000 G;
adicionado no início adicionaria terabytes, por exemplo.Você pode usar expressões regulares perl para fazer isso. Por exemplo,
Este é um script simples. Você pode considerá-lo como ponto de partida. Espero que ajude!
fonte
Pessoalmente, eu não usaria a bandeira -h em primeiro lugar. A versão "legível por humanos" arredonda números que precisarão ser arredondados novamente quando você converter novamente, ficando ainda menos precisos. (Por exemplo, 2.7MiB é 2831155.2 bytes. O que você fez com os outros 0,8th de um byte ??!)
Caso contrário, você pode pedir
units
para converter MiB / GiB / KiB em apenas "B" e isso resolverá isso, mas você teria que fazer algo como (supondo que sua saída seja tabulada, caso contrário,cut
adequadamente)fonte
units
falta na minha distribuição mínima! Acho que todos faríamos isso de forma diferente se tivéssemos controle total de tudo.fonte