преобразовать научную нотацию csv в число в unix - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть следующие данные в CSV-файле: -

year,num_val
2008,4.31333E+16
2009,473538088A5031009
2010,4.31333E+16

Я хочу преобразовать научную нотацию в вышеуказанный CSV-файл, представленный в окне Unix, и я хотел получить результат, как показано ниже: -

year,num_val
2008,43133300000000000
2009,473538088A5031009
2010,43133300000000000

Я пытался сделать то же самое, используя awk, но я получаю частичные данные, как показано ниже: -

awk -F',' '{printf "%16.0f\n",$2}' file.csv

Полученный результат: -

43133300000000000
        473538088
43133300000000000

Может кто-нибудь подсказать мне более оптимальное решение для того же.

1 Ответ

0 голосов
/ 19 ноября 2018

Чтобы быть немного безопаснее, я бы сделал следующее в :

awk 'BEGIN{FS=OFS=","}($2==$2+0){$2=sprintf("%16.0f",$2)}1' file

Это проверяет, является ли $2 числом, и если да, то оно конвертируетЭто.Просто проверить, содержит ли строка E, может не получиться, если строка во второй строке может напечатать E.

Еще более надежно, если вы хотите преобразовать только научную нотацию, вы можете сделать:

awk 'BEGIN{FS=OFS=","}($2==$2+0)&&($2~/E|e/){$2=sprintf("%16.0f",$2)}1' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...