수천 개의 열로 구성된 파일에서 특정 열을 곱합니다.

수천 개의 열로 구성된 파일에서 특정 열을 곱합니다.

파일은 다음과 같습니다

-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으로 계속 인쇄하세요. 파일의 끝에서 또는 빈/빈 줄에 도달하면(둘 중 먼저 발생하는 경우) 종료됩니다.

관련 정보