다음 정보(부분 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