파일은 다음과 같습니다
-17.3644 0.00000000 0.00000000 ....
-17.2703 0.00000000 0.00000000 ....
-17.1761 0.00000000 0.00000000 ....
-16.5173 0.00000000 0.00000000 ....
-16.4232 0.00000000 0.00000000 ....
예상되는 출력은 다음과 같아야 합니다.
-173.644 0.00000000 0.00000000 ....
-172.703 0.00000000 0.00000000 ....
-171.761 0.00000000 0.00000000 ....
-165.173 0.00000000 0.00000000 ....
-164.232 0.00000000 0.00000000 ....
그래서 첫 번째 열에 10을 곱하고 나머지 1000개의 열은 유지하고 싶습니다. awk '{print $1*10}' infile > outfile
첫 번째 열만 인쇄되는 경우 다른 열은 어떻게 유지합니까?
답변1
노력하다
awk '{$1=$1*10 ; print }'
그러면 첫 번째 매개변수가 변경되고 전체 줄이 인쇄됩니다.
3자리 형식을 유지하려면 다음을 사용하세요.
awk '{$1=sprintf("%.3f",$1*10);print;}'
답변2
Python으로 테스트
#!/usr/bin/python
import re
k=open('p.txt','r')
for i in k:
k=re.sub(' +',' ',i).split(' ')
print float(k[0])*10,k[1],k[2]
산출
-173.644 0.00000000 0.00000000
-172.703 0.00000000 0.00000000
-171.761 0.00000000 0.00000000
-165.173 0.00000000 0.00000000
-164.232 0.00000000 0.00000000
답변3
$ < infile tr \- _ |
dc -e "
[q]sq
[SMlN1+sNz1<a]sa
[LMn32anlN1-dsN0<b]sb
[?z0=q0sNlax.1/n32anlbx[]pclcx]sc
3klcx
"
산출:
-173.644 0 0 0 0 0 0
-172.703 0 0 0 0 0 0
-171.761 0 0 0 0 0 0
-165.173 0 0 0 0 0 0
-164.232 0 0 0 0 0 0
간략한 설명:
이것은 메인 스택에 데이터를 저장하는 dc
역폴란드 표기법 계산기입니다 . RPN
필드가 하나만 남을 때까지 현재 행의 필드를 명명된 스택 M에 저장합니다. .1로 나누고 == 10을 곱하고 결과에 스케일링을 적용합니다. 이제 M 스택으로 돌아가서 수정되지 않은 현재 라인 필드를 다시 메인 스택에 놓습니다. M 스택에서 꺼내는 동안 stdout으로 계속 인쇄하세요. 파일의 끝에서 또는 빈/빈 줄에 도달하면(둘 중 먼저 발생하는 경우) 종료됩니다.