두 번째 열에서 수학 연산을 수행합니다.

두 번째 열에서 수학 연산을 수행합니다.

내 원본 파일이 다음과 같다고 가정해 보겠습니다.

            N O D E   O U T P U T

THE FOLLOWING TABLE IS PRINTED FOR NODES BELONGING TO NODE SET NSET_OUTPUT
   NODE FOOT-   NT11     
        NOTE

      3       20.00     
     11       20.00     
   1003       23.75     
   1011       23.75     
   2003       27.52     
   2011       27.52     
   3003       31.30     
   3011       31.30     
   4003       35.08     

두 번째 파일을 생성해야 하지만 두 번째 열의 값에 100을 곱하기만 하면 됩니다. 이 파일을 어떻게 구할 수 있나요?

답변1

숫자 데이터 블록의 필드 너비와 형식을 유지한다고 가정하면 다음과 같은 것을 제안합니다.

awk '
  $1 ~ /[0-9]+/ && $2 ~ /[-+0-9.]+/ {
    $0 = sprintf("%6d%12.2f", $1, 100*$2)
  } 1
' file

전임자.

$ awk '$1 ~ /[0-9]+/ && $2 ~ /[-+0-9.]+/ {$0 = sprintf("%6d%12.2f", $1, 100*$2)} 1' file
            N O D E   O U T P U T

THE FOLLOWING TABLE IS PRINTED FOR NODES BELONGING TO NODE SET NSET_OUTPUT
   NODE FOOT-   NT11     
        NOTE

     3     2000.00
    11     2000.00
  1003     2375.00
  1011     2375.00
  2003     2752.00
  2011     2752.00
  3003     3130.00
  3011     3130.00
  4003     3508.00

답변2

나는 요청을 단순히 두 번째 열의 숫자에 100을 곱한 결과로 구성된 출력으로 해석하기로 결정했습니다.

이는 헤더가 정적이고 항상 6줄 길이라고 가정합니다. 무시됩니다.

$ awk 'FNR > 6 { print 100*$2 }' <infile
2000
2000
2375
2375
2752
2752
3130
3130
3508

FNR > 6최소 6개 라인을 읽었을 때 조건은 두 번째 필드를 곱하고 출력하는 블록을 트리거합니다.

헤더의 길이를 모르는 경우 다음을 FNR > 6사용할 수 있습니다.$2 ~ /^-?[0-9.]+$/어린애 같은두 번째 필드가 부동 소수점인지 여부를 테스트하는 방법으로 선택적으로 서명됩니다("선택 사항 -뒤에 숫자와 점만 표시됨").

답변3

출력이 "outfile"이라는 파일에 저장되었다고 가정하면 여기에 또 다른 해결책이 있습니다. 단, 숫자 데이터가 포함된 열의 형식은 유지되지 않는다는 점에 주의해야 합니다.

awk '{if(/^ *[0-9\.]+ *[0-9\.]+ *$/) {var=$2*100; print $1,var;} else { print $0 }}' outfile

관련 정보