텍스트 파일의 한 줄에서 두 위치 사이의 패턴을 검색하고 패턴이 발견된 전체 줄을 인쇄하는 방법은 무엇입니까? 고정 너비 파일로 작업하고 있습니다. 각 필드의 길이가 포함된 목록을 제공하는 방법을 이해 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
오른쪽 경계를 표시하고 ^를 사용하여 왼쪽 경계를 제한합니다. 이 범위에서 정규식을 찾으세요. 찾은 경우 원본으로 보류를 인쇄합니다. 철사.