텍스트 파일에서 두 위치 사이의 패턴을 검색하고 전체 줄을 인쇄합니다.

텍스트 파일에서 두 위치 사이의 패턴을 검색하고 전체 줄을 인쇄합니다.

텍스트 파일의 한 줄에서 두 위치 사이의 패턴을 검색하고 패턴이 발견된 전체 줄을 인쇄하는 방법은 무엇입니까? 고정 너비 파일로 작업하고 있습니다. 각 필드의 길이가 포함된 목록을 제공하는 방법을 이해 awk하지만 검색 패턴의 단일 필드에만 관심이 있습니다. 각 필드의 길이를 지정하지 않는 더 간단한 솔루션이 있습니까?

이는 파일의 텍스트 줄입니다. 다른 위치에 "Cook Co. IL"이 없는 위치 18과 57 사이의 모든 노선을 어떻게 찾을 수 있나요?

17 031 1602 1600 Cook Co. IL                              047 011 9999 9999 Bradley Co. TN                                16

답변1

해결책:

awk 'substr($0,18,57-18)~/Cook Co\. IL/' file

하위 문자열(문자열, 시작[, 길이])
반환길이- 문자 길이의 하위 문자열, 문자 수부터 시작시작.

답변2

행을 세 개의 필드(0-17, 18-57, 58+)로만 처리하려고 하므로 필드 너비를 지정하는 것은 어렵지 않습니다.

awk -v FIELDWIDTHS="17 40"  -e '$2 ~ /Cook Co\. IL/'

답변3

sed -e 'h; s/./&\n/57; /^.\{17\}.*Cook Co[.] IL.*\n/!d; g' yourfile

오른쪽 경계를 표시하고 ^를 사용하여 왼쪽 경계를 제한합니다. 이 범위에서 정규식을 찾으세요. 찾은 경우 원본으로 보류를 인쇄합니다. 철사.

관련 정보