두 개의 열이 있는 큰 파일이 있고 0.00, 0.50, 1.00, 1.50...등의 값을 해석하고 싶습니다. (아직 존재하지 않는 경우)이전 값과 다음 값의 평균을 계산합니다. 예를 들어, 해당 값3.00누락되었으므로 첫 번째 열에 3.00 행을 추가하고 두 번째 열에 해당 값 =을 추가하고 싶습니다.(2.99 + 3.56)/2=3.14그리고 똑같은 짓을 해3.50, 4.00, 4.50...등등. 이건 내 입력이야
0.00 0.29
0.50 0.79
1.00 1.31
1.50 1.86
2.00 2.42
2.50 2.99
3.25 3.56
3.75 4.15
4.25 4.73
4.75 5.32
5.00 5.92
5.50 6.53
6.00 7.15
이것이 내가 원하는 출력이다
0.00 0.29
0.50 0.79
1.00 1.31
1.50 1.86
2.00 2.42
2.50 2.99
3.00 3.28
3.50 3.86
4.00 4.44
4.50 5.03
5.00 5.92
5.50 6.53
6.00 7.15
답변1
두 단계로 진행하겠습니다.
먼저, 누락된 데이터가 보간됩니다. 예는 다음과 같습니다 awk
.
awk '
($1 - prev1) > 0.25 { printf "%.2f %.2f\n", prev1 + 0.25, (prev2 + $2)/2 }
{ print; prev1 = $1; prev2 = $2 }
' data_file
작동 방식은 다음과 같습니다.
- 먼저, 열 1의 값이 누락된 것을 발견하면(이전 값의 > 0.25) 열 2의 평균을 계산하여 누락된 행을 인쇄합니다.
- 다음으로 현재 줄을 인쇄하고 다음 루프의 이전 값을 설정합니다.
마지막으로 원하지 않는 행을 필터링할 수 있습니다.
(previous awk command) | awk '$1 ~ /0$/'
마지막 awk
명령은 첫 번째 값이 로 끝나는 줄만 표시합니다 0
.