grep -f 패턴 파일 패턴 파일의 내용에 따라 아무것도 발견되지 않거나 너무 많이 발견됩니다.

grep -f 패턴 파일 패턴 파일의 내용에 따라 아무것도 발견되지 않거나 너무 많이 발견됩니다.

grep패턴 목록이 있는 행에 대해 가능한 많은 솔루션을 검색하고 읽고 시도한 후에 이 글을 쓰고 있습니다. 이것은 제가 알고 있고 많은 포럼에 참여한 매우 기본적인 것입니다.

하지만 다음과 같은 문제가 있습니다. 두 개의 파일이 있고 더 큰 파일에서 더 작은 파일의 패턴과 일치하는 줄을 가져오고 싶습니다.

file_A.txt(일치할 패턴의 단일 열 목록)가 있습니다. 예를 들면 다음과 같습니다.

comt241_c0_seq1
comt868_c0_seq1
comt685_c0_seq1
comt7977_c0_seq1
comt6723_c0_seq1
comt363_c0_seq1
comt384_c0_seq1

또 다른 file_B.txt(탭으로 구분, file_A보다 항목이 많음)

comp5_c0_seq1   0   0   0   6   0   0   0   0   0
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comp429_c0_seq1 0   0   0   0   0   0   0   0   0
comp452_c0_seq1 0   0   0   0   0   0   0   0   0
comp452_c0_seq2 0   0   0   0   0   0   0   0   0
comp483_c0_seq1 33  8   10  32  0   33  8   0   37
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comp494_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comp564_c0_seq1 0   0   0   0   0   0   0   0   0
comp596_c0_seq1 0   0   0   0   0   0   0   0   0
comp653_c0_seq1 10  0   0   2   0   0   0   0   0
comp724_c0_seq1 0   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0

나는 노력했다grep -f file_A file_B > file_C

그러나 빈 파일을 반환합니다.

그래서 다음 명령을 사용하여 file_A에서 모든 공백을 제거했습니다.

sed 's/[ \t]*$//' file_A > new_file_A

그러나 성공하지 못했습니다. 특수 문자나 공백을 제거하고 파일을 올바르게 구분하기 위해 많은 노력을 기울였지만 추가 항목이 제공되거나 아무것도 제공되지 않습니다.

file_A나 file_B에 특수문자가 있는 것 같은데 이게 문제인 것 같아요. 텍스트 관리자 편집기를 사용하고 있습니다.

grep 외에 다른 방법은 없나요?

답변1

grep 명령이 올바른 것 같습니다. 다른 파일 이름을 사용하지 않는 한:

grep -f list_A list_B

바꾸다

~$ grep -f fileA.txt fileB.txt
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0

답변2

동일한 내용으로 두 개의 파일을 만들고 grep동일한 방식으로 사용했는데 훌륭하게 작동했습니다. 동일한 파일 이름을 사용하시기 바랍니다(질문에 .txt 확장자가 누락된 것으로 보입니다).

[sreeraj@server ~]$ grep -f file_A.txt file_B.txt > file_C.txt
[sreeraj@server ~]$ cat file_C.txt
comt241_c0_seq1 0   0   0   0   0   0   0   0   0
comt868_c0_seq1 0   0   0   0   0   0   0   0   0
comt363_c0_seq1 0   0   0   0   0   0   0   0   0
comt384_c0_seq1 0   0   0   0   0   0   0   0   0
comt685_c0_seq1 0   0   0   0   0   0   0   0   0
comt7977_c0_seq1    1   0   0   0   0   0   0   0   0
comt6723_c0_seq1    0   0   0   0   0   0   0   0   0
[sreeraj@server ~]$

dos2unix이 두 파일 이름으로 인해 여전히 빈 파일이 생성되면 해당 파일을 사용해 볼 수 있습니다.

dos2unix file_A.txt
dos2unix file_B.txt

관련 정보