문자열이나 숫자를 일치시킨 후 후속 줄을 삭제하는 방법은 무엇입니까? [복사]

문자열이나 숫자를 일치시킨 후 후속 줄을 삭제하는 방법은 무엇입니까? [복사]

다음 정보(부분 cat file)를 포함하는 대용량 파일이 있다고 가정해 보겠습니다.

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191
33.833035   -0.113242   1.157228
33.834034   -0.113157   1.157273
33.835033   -0.113071   1.157300

첫 번째 열에는 모든 후속 행을 삭제한다고 가정하고 부동 소수점 숫자가 오름차순으로 포함되어 있으므로 33.832035출력은 다음과 같아야 합니다.

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191

sed적절한 텍스트 처리 도구를 사용하여 이 작업을 어떻게 수행할 수 있습니까 ?

나는 노력했다한 줄에서 문자열이 처음 나타난 이후의 모든 줄을 삭제합니다.하지만 내 경우에는 성공적으로 구현되지 않았습니다.

답변1

연결 문제에 대한 솔루션의 약간 변형에는 첫 번째 일치 행이 포함됩니다.

sed '/33.832035/q'

그러면 "33.832035"가 포함된 첫 번째 줄을 포함하여 모든 줄이 인쇄되고 종료됩니다.

예를 들어 AWK와 같은 다른 텍스트 처리 언어에도 유사한 내용이 있습니다.

awk '1; /33.832035/ { exit }'

이렇게 하면 모든 줄( 1항상 일치하고 AWK가 현재 줄을 인쇄하는 기본 작업을 적용하게 함)을 인쇄하고 현재 줄이 "33.832035"와 일치하면 종료됩니다.

두 경우 모두 정규식을 더 제한적으로 만들 수 있습니다.예를 들어 /^33.832035 /줄 시작 부분의 완전한 필드만 일치합니다.

답변2

Awk방법:

awk '$1 == 33.832035{ print; exit }1' file

예제 출력:

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191

관련 정보