gawk 또는 unix에서 찾기

gawk 또는 unix에서 찾기

유닉스나 gawk.

을 사용하고 있지만 grep -f file1 file2이는 해당 문자열을 포함하는 파일 2의 첫 번째 열에 있는 줄뿐만 아니라 파일 1의 문자열을 포함하는 파일 2의 모든 줄을 인쇄합니다.

gawk다른 UNIX 도구를 사용하여 이 문제를 어떻게 해결할 수 있습니까 ?

답변1

while read vl ; do grep "^$vl " file2 ; done < file1

read개행 문자로 끝나는 입력을 찾아 변수에 넣습니다 vl. 루프 로 래핑하여 while모든 것에 대해 이를 반복합니다 STDIN. < file1콘텐츠를 사용하여 file1STDIN으로 리디렉션하므로 모든 항목에 대해 루프가 반복됩니다 file1. (에 저장된) 각 행 에 대해 file1접두사가 붙은 검색어를 사용하여 vlgrep합니다 . 이렇게 하면 검색어가 의 줄 시작 부분에 바인딩됩니다. 또한 grep 검색 문자열 끝에 공백을 추가하여(file2의 열 구분 기호는 공백이라고 가정합니다) foobar와 정확히 일치하고 하위 일치(검색어가 foo이고 행이 있는 경우)만 일치하지 않도록 했습니다. 첫 번째 열로file2^file2file2아니요일치를 얻으십시오). file2공백이 공백이 아닌 경우 공백을 필드 구분 기호로 바꾸세요.

file1을 마음대로 변경할 수 있다면 다음을 수행하십시오.

sed -i 's/^\(.*\)$/^\1 /' file1

그러면 원본이 grep -f작동합니다(다음에 공백을 구분 기호로 사용했음을 다시 한 번 참고하세요 \1).

관련 정보