$ 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, отсутствуют.