$ awk '{ split(sprintf("%1.3e", $1), b, "e"); p = substr("yzafpnum_kMGTPEZY", (b[2]/3)+9, 1); o = sprintf("%f", b[1] * (10 ^ (b[2]%3))); gsub(/\./, p, o); print substr( gensub(/_[[:digit:]]*/, "", "g", o), 1, 4); }' < test.dat


Команда awk выполняет обработку текста по указанным правилам. В данном случае она принимает входные данные из файла test.dat.
Команда разбивает каждую строку на два числа: мантиссу и показатель степени в научной нотации. Затем происходит перевод числа в строку в экспоненциальном формате, используя функцию sprintf и операцию деления по модулю.
Далее происходит преобразование показателя степени в символы единиц измерения (yzafpnum_kMGTPEZY) на основе деления на три.
Затем число умножается на 10 в степени, равной остатку от деления на 3.
После этого происходит замена точки на символ единицы измерения, а также удаление подчеркивания и всех числовых символов в строке.
Выводится первые 4 символа получившейся строки.
Альтернативные способы получения чисел в научной нотации SI могут включать использование других языков программирования, таких как Python или R, или использование специализированных библиотек, таких как numpy.
Аргументы, переданные команде awk, отсутствуют.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *