다음은 12 열의 데이터에 유용하지만 전적으로 같지 않은 70 열 이상을 가지고 있으며 변환 된 모든 열을 과학적 값으로 대체해야합니다 .과학 표기법을 여러 필드에서 십진수로 변환
awk -F',' '{printf "%.41f\n", $12}' $file
감사
이 한 라인 ..
이 아닌 변환 출력 작동
2012-07-01T21:59:50,2012-07-01T21:59:00,1817,22901,264,283,549,1,2012-06-24T13:20:00,2.600000000000000e+001,4.152327506554059e+001,-7.893523806678388e+001,5.447572631835938e+002,2.093000000000000e+003,5.295000000000000e+003,1,194733,1.647400093078613e+001,31047680,1152540,29895140,4738,1.586914062500000e+000,-1.150000000000000e+002,0.000000000000000e+000,0.000000000000000e+000,0.000000000000000e+000,0.000000000000000e+000,0.000000000000000e+000,0.000000000000000e+000,0.000000000000000e+000,3.606000000000000e+003,0.000000000000000e+000,0.000000000000000e+000,0.000000000000000e+000,4.557073364257813e+002,0.000000000000000e+000,0.000000000000000e+000,0.000000000000000e+000,11,0.000000000000000e+000,2.000000000000000e+000,0,0,0,0,4.466836981009692e-004,0.000000000000000e+000,0.000000000000000e+000,0.000000000000000e+000,8,0,840,1,600,1,6,1,1,1,5,2,2,2,1,1,1,1,4854347,0,-
UPDATE. 어떤 이유로 if else 문을 삽입하는 데 약간의 문제가 있습니다. 모든 것이 파일이나 cli에서 구문 오류를 발생시키는 것 같습니다.
awk -F',' '{for (i=1;i<=NF;i++) {if (i <= 9||i == 16||i == 17||i == 19||i == 20||i == 21||i == 22|| i == 40|| i == 43||i == 44||i == 45||i == 46||i >= 51) printf ($i",")};}' $file
위의 코드에 다음 문장을 삽입하고 싶습니다.
else if (i == 10) printf ("%.41f", $i)
는
그것을 밖으로 일있어 해결했다. 모든 위대한 아이디어에 감사드립니다. awk -f를 사용하여 파일에서 작동하도록 만들 수는 없지만 커맨드 라인에서 이것은 훌륭하게 작동합니다. 내 프로그램에이 라이너 하나를 넣었습니다.awk -F',' '{for (i=1;i<=NF;i++) {if (i <= 9||i == 16||i == 17||i >= 19&&i <= 22|| i == 40|| i >= 43&&i <= 46||i >= 51&&i <= 70) printf($i","); else if (i == 10||i == 18) printf("%.2f,", $i); else if (i == 11||i == 12) printf("%.41f,", $i); else if (i == 13) printf("%.1f,", $i); else if (i == 14||i == 15||i >= 24&&i <= 46) printf ("%d,", $i); else if (i == 23) printf("%.4f,", $i); else if (i >= 47&&i <= 50) printf("%.6f,", $i); if (i == 71) printf ($i"\n")};}'
결과
2012-07-01T21:59:50,2012-07-01T21:59:00,1817,22901,264,283,549,1,2012-06-24T13:20:00,26.00,41.52327506554058800247730687260627746582031,-78.93523806678388154978165403008460998535156,544.8,2093,5295,1,194733,16.47,31047680,1152540,29895140,4738,1.5869,-115,0,0,0,0,0,0,0,3606,0,0,0,455,0,0,0,11,0,2,0,0,0,0,0.000447,0.000000,0.000000,0.000000,8,0,840,1,600,1,6,1,1,1,5,2,2,2,1,1,1,1,4854347,0,-
필자는 명령 줄에서이 작업을 수행하지 않을 것입니다. 아래의 @DennisWilliamson 접근법을 확인하고 싶을 것입니다. – Levon