고정 길이 파일의 특정 열에서 패턴을 찾고 전체 줄을 다른 파일로 출력하려면 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인지 확인하세요. 그렇지 않으면 해당 줄을 삭제하세요.