조건부로 파일에서 한 줄 삭제

조건부로 파일에서 한 줄 삭제

다음과 같은 파일에서:

549.432086168
0.0000E+00 9.6988e-04 2.0580E-02
1.0000E+01 9.6988e-04 2.0580E-02
2.0000E+01 9.6988e-04 2.0580E-02
.
.
.
5.6000E+02 7.0997e-06 -3.7538E-04

첫 번째 행의 첫 번째 열에 있는 숫자와 마지막 행의 숫자 차이가 10보다 크면 마지막 행을 삭제합니다. 따라서 이 경우 마지막 행은 560 - 549.43208616810보다 크므 로 삭제됩니다 .

이를 효율적으로 수행하는 방법에 대한 제안 사항이 있습니까?

답변1

일반적인 작업 awk:

awk 'NR == 1 {first = $1}; $1 - first <= 10' < file

아니면 마지막 행에 대해 다음을 수행합니다.

awk 'NR == 1 {first = last = $0; next}
     {print last; last = $0}
     END {if (NR && last - first <= 10) print last}' < file

답변2

당신은 그것을 사용할 수 있습니다 perl:

perl -lne '
  $n = $_ if $. == 1;
  print unless eof;
  print if $_ - $n <= 10 and eof;
' <file
  • 첫 번째 행의 경우 $. == 1해당 값을 변수로 설정합니다.$n
  • 다음 줄의 경우 마지막 줄이 아닌 경우 인쇄하십시오.
  • 첫 번째 열 간의 차이가 $n10보다 작거나 같으면 마지막 행을 인쇄합니다.

여기서는 를 사용하여 $_ - $n숫자 컨텍스트의 마지막 행을 강제로 적용하므로 첫 번째 열 값이 사용됩니다.

$ perl -le 'print "5.6000E+02 7.0997e-06 -3.7538E-04"-0'
560

관련 정보