다음과 같은 파일에서:
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.432086168
10보다 크므 로 삭제됩니다 .
이를 효율적으로 수행하는 방법에 대한 제안 사항이 있습니까?
답변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
- 다음 줄의 경우 마지막 줄이 아닌 경우 인쇄하십시오.
- 첫 번째 열 간의 차이가
$n
10보다 작거나 같으면 마지막 행을 인쇄합니다.
여기서는 를 사용하여 $_ - $n
숫자 컨텍스트의 마지막 행을 강제로 적용하므로 첫 번째 열 값이 사용됩니다.
$ perl -le 'print "5.6000E+02 7.0997e-06 -3.7538E-04"-0'
560