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