고정 길이 파일의 특정 열에서 여러 패턴을 검색하여 전체 라인을 출력합니다.

고정 길이 파일의 특정 열에서 여러 패턴을 검색하여 전체 라인을 출력합니다.

고정 길이 파일의 특정 열에서 패턴을 찾고 전체 줄을 다른 파일로 출력하려면 Unix에서 명령이 필요합니다.

샘플 파일 1

2345abcdef450022677
1234sdfght350022677
3456abcdef350022677

열 5~10 = abcdef이고 열 15~16 = 22인 경우 이러한 행을 추출해야 합니다.

출력 파일에 다음 데이터가 있기를 원합니다.

2345abcdef450022677
3456abcdef350022677

grep과 함께 cut 명령을 사용하여 패턴을 찾을 수 있지만 전체 라인을 출력하는 방법을 잘 모르겠습니다.

답변1

이 시도

$ cat foo
2345abcdef450022677
1234sdfght350022677
3456abcdef350022677
$ grep -E '^.{4}abcdef.{4}22' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

또는

$ awk 'substr($0,5,6)=="abcdef" && substr($0,15,2)=="22"' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

심지어

$ grep '^....abcdef....22' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

마지막으로 sed를 사용합니다(5~10번째가 abcdef이고 15~16번째가 22인지 확인하세요. 해당 줄이 제거되지 않으면 user112638726에게 크레딧을 부여하세요).

sed '/^.\{4\}abcdef.\{4\}22/p;d' foo

답변2

sed에서

sed '/^.\{4\}abcdef.\{4\}22/p;d' file

5~10번째 숫자가 abcdef인지, 15~16번째 숫자가 22인지 확인하세요. 그렇지 않으면 해당 줄을 삭제하세요.

관련 정보