행 수가 제한된 특정 열에 상수 값을 추가하고 소수 자릿수 정밀도를 설정하는 방법

행 수가 제한된 특정 열에 상수 값을 추가하고 소수 자릿수 정밀도를 설정하는 방법

10행부터 20행까지 세 번째(두 번째) 열에 상수 값을 추가하고 싶습니다. 수행하는 방법? 이 코드를 시도해 보았는데 제대로 작동하는 것 같습니다. 그것은 나에게 동일한 출력 파일을 제공합니다. 누군가 왜 이것이 더 잘 작동하는지 설명할 수 있습니까?

 awk '{if(NR>9) $3=$3+1; print $0}' <file_input  > file_output

이 경우 awk를 사용하는 것보다 더 나은 해결책이 있다고 생각하십니까? 알려주세요. 감사합니다. 모두에게 행운을 빕니다.

이것은 input_file의 헤더입니다

SCAN U=3
1.0
+7.2621642310  +0.0000000000  +0.0000000000
+0.0000000000  +7.4947599620  +0.0000000000
-0.4702406680  +0.0000000000 +50.5797763000
O W
56 20
Selective
Cartesian
+6.9271068928 +7.2623406786 33.3906 T T T

...다음과 같이 계속하면 예상되는 결과는 다음과 같습니다.

SCAN U=3
1.0
+7.2621642310  +0.0000000000  +0.0000000000
+0.0000000000  +7.4947599620  +0.0000000000
-0.4702406680  +0.0000000000 +50.5797763000
O W
56 20
Selective
Cartesian
+6.9271068928 +8.2623406786 34.3906 T T T

그리고 연산 결과의 소수점 이하 정밀도는 어떻게 설정하나요?

답변1

나는 그것을 알아

awk 'NR>9 && NR<21{
  printf "%s %+.10f %.4f %s %s %s\n",$1,1+$2,1+$3,$4,$5,$6; 
  next ; }
 {print}' 

어디

  • printf포맷을 위해
  • %+.10f최고의 정확도를 자랑하는 10개의 플로트가 있습니다.+
  • 고정된 수의 필드 사용
  • 한 줄로 작성해도 됩니다. 읽기용으로 구분했습니다.

귀하의 경우에 따라 locale접두사를 추가해야 할 수도 있습니다.LANG=C

예를 들어

LANG=C awk '...'

내 프랑스 지역 회선은

+6.9271068928 +8,0000000000 34,0000 T T T

답변2

awk 'NR>9 && NR<21{$2=$2+1;$3=$3+1}{print}' <file_input  > file_output

~에 귀속됨콰지모도

관련 정보