두 텍스트 파일에서 동일한 패턴으로 시작하는 줄 일치

두 텍스트 파일에서 동일한 패턴으로 시작하는 줄 일치

이제 일부 줄이 동일한 패턴으로 시작되는 두 개의 텍스트 파일이 있습니다. 예를 들어,

파일 A

1Mo 1,1 사랑해요.
1Mo 1,2 나는 당신을 좋아합니다.
안녕하세요 23,3 배고파요.
안녕하세요 23,4 저는 바보예요.

문서 B

1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
안녕하세요, 23,5 저는 Duster입니다.
안녕하세요, 23,6 Ich bin Neu입니다.

파일 A와 파일 B에는 각각 동일한 패턴 "1Mo 1,1" 및 "1Mo 1,2"로 시작하는 두 줄이 있습니다. 내 예상 결과는 다음과 같습니다.

1Mo 1,1 사랑해요.
1Mo 1,2 나는 당신을 좋아합니다.
1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.

내 생각은 grep을 사용하여 파일 A의 각 줄의 시작 패턴을 추출한 다음 해당 패턴을 사용하여 파일 B의 각 줄과 일치시켜야 한다는 것입니다. 아래와 같이 grep 명령을 작성해 보았지만 실패했습니다.

grep "^[.Az]*\s[.]*\s" 파일 A > extract.txt

다음은 커뮤니티를 검색하여 파일 B의 문자열 일치에 적용한 명령입니다.

문자열을 읽을 때 grep "$string" file B를 실행합니다. < extract .txt

패턴 추출 및 일치에 grep을 사용하는 방법을 아는 사람이 있습니까?

답변1

문서:

> cat a
1Mo 1,1 I love you.
1Mo 1,2 I like you.
1Mo 1,3 I am hungry.
1Mo 1,4 I am foolish.

> cat b
1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
1Mo 1,5 Ich habe Durst.
1Mo 1,6 Ich bin neu.

처음 두 단어를 공유하는 공통 줄을 찾습니다(공백으로 구분).

> awk '{print $1 " " $2}' a > find
> grep -f find b | awk '{print $1 " " $2}' > find2

이제 다음 패턴과 일치하는 모든 줄을 찾으세요.

> grep -f find2 a b
a:1Mo 1,1 I love you.
a:1Mo 1,2 I like you.
b:1Mo 1,1 Ich liebe dich.
b:1Mo 1,2 Ich mag dich.

마지막으로 파일 이름을 필터링합니다.

> grep -f find2 a b | sed 's/^[^:]*://'
1Mo 1,1 I love you.
1Mo 1,2 I like you.
1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.

답변2

Grep은 여러 인수를 제외하므로 예제에서 이 간단한 패턴을 사용할 수 있습니다.

grep -Eh '1,1|1,2' "File A" "File B"

관련 정보