유닉스나 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
콘텐츠를 사용하여 file1
STDIN으로 리디렉션하므로 모든 항목에 대해 루프가 반복됩니다 file1
. (에 저장된) 각 행 에 대해 file1
접두사가 붙은 검색어를 사용하여 vl
grep합니다 . 이렇게 하면 검색어가 의 줄 시작 부분에 바인딩됩니다. 또한 grep 검색 문자열 끝에 공백을 추가하여(file2의 열 구분 기호는 공백이라고 가정합니다) foobar와 정확히 일치하고 하위 일치(검색어가 foo이고 행이 있는 경우)만 일치하지 않도록 했습니다. 첫 번째 열로file2
^
file2
file2
아니요일치를 얻으십시오). file2
공백이 공백이 아닌 경우 공백을 필드 구분 기호로 바꾸세요.
file1을 마음대로 변경할 수 있다면 다음을 수행하십시오.
sed -i 's/^\(.*\)$/^\1 /' file1
그러면 원본이 grep -f
작동합니다(다음에 공백을 구분 기호로 사용했음을 다시 한 번 참고하세요 \1
).