2014-04-11 2 views
1

안녕 얘들을 곱하면서 다수의 표기법을 변환 I가 다음 줄 :awk는 : 나는 열을

A=3.5e30 
B=4.345e40 

sed 's/D/E/g' File | awk '{print $1, $6*'$A', 10^($9)*'$B', $13, $8}' > File2 

(파일이 표기 1.2345678D + 10의 숫자와 열을 포함) 내가 얻는 결과는 다음과 같습니다.

3.168808781403E+02 29825999184755995994350665720659968 71343531834366140263241767594070376448 ... etc 

어떻게하면 두 번째와 세 번째 열이 fi와 동일한 표기법으로 표시됩니까? 첫 번째 열? 즉,

대신 갖는 71343531834366140263241767594070376448

내가 원하는 : 7.134353183436E+37

그냥 수 있도록 당신이 대답은 알고

sed 's/D/E/g' File | awk '{printf "%.12E %.12E %.12E %.12E %.12E\n", $1, $6*'$A', 10^($9)*'$B', $13,$8 }' > File2 

답변

1

당신은 소위 과학적 표기법을 원하는 경우 printf와 %E 형식 지정자를 사용하십시오.

예 :

echo 71343531834366140263241767594070376448 | awk '{printf "%E",$1}' 

출력 :

7.134353E+37 
+0

좋지만 어떻게 같은 라인에서 이것을 하는가? (그리고 나는 다른 컬럼을 가지고있다) – Nikko

+0

print 대신에 printf를 사용한다 :'awk '{printf "% E % E % E ...", $ 1, $ 6 *'$ A ', 10^($ 9) *'$ B ', $ 13, $ 8 ...' – hek2mgl

+0

이것은 하나입니다! 감사! – Nikko

1
awk 'BEGIN { printf("%E\n", 71343531834366140263241767594070376448); }' 
7.134353E+37 
+0

니스하지만 같은 줄에서 어떻게해야합니까? (그리고 나는 다른 컬럼을 가지고있다) – Nikko

1

단순히 printf() 대신 print()를 사용

$ awk 'BEGIN { printf "%e\n", 282048204209482034890 }' /dev/null 
2.820482e+20 
+0

고마워하지만 다른 라인에서이 작업을 수행해야합니다. – Nikko

+0

예; 결과를 명령 행에 표시하는 예제 일뿐입니다. 코드에서 BEGIN 블록이 필요 없습니다. – Jens

1

당신이 당신의 코드에서 해결해야 할 몇 가지 문제가 있습니다 :

AWK에서 쉘 VAR의
  • 사용 :

    awk -v awkVar1="$A" -v awkVar2="$B" ... '{use awkVar1 without $}' file 
    
  • 과학 표기법 형식을 얻을, 당신은 %E, %e, %g, %G 중 하나가 당신을 위해 도움이 될 것 printf와 형식을 정의해야합니다.