두 파일의 데이터를 비교하려고 합니다. 그 중 하나에는 열이 포함되어 있으며 두 파일에 있는 데이터를 인쇄하려고 합니다.
파일 1:
item1
item2
item3
파일 2:
itemA item1
itemB item2
itemC item3
그래서 파일 1의 열 2를 파일 2와 비교하고 동일하다면 전체 행을 표시하고 싶습니다.
예를 들어파일 1포함하다:
data1
data2
그리고파일 2포함하다:
dataA data1
dataC data3
다음만 표시됩니다.
dataA data1
이는 file1의 데이터 항목을 포함하는 file2의 행이기 때문입니다.
미리 감사드립니다
답변1
사용 grep
:
grep -Fwf file1 file2
~에서man grep
:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings (instead of regular expressions), separated by
newlines, any of which is to be matched.
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. If this option is used multiple times or is combined with
the -e (--regexp) option, search for all patterns given. The empty file contains zero patterns, and
therefore matches nothing.
-w, --word-regexp
Select only those lines containing matches that form whole words. The test is that the matching
substring must either be at the beginning of the line, or preceded by a non-word constituent
character. Similarly, it must be either at the end of the line or followed by a non-word
constituent character. Word-constituent characters are letters, digits, and the underscore.
또는 awk
:
awk 'NR==FNR{seen[$0]++} ($2 in seen)' file1 file2
위에서 먼저 우리가 읽고 있는 것은파일 1전체 열 1을 이름이 지정된 배열에 저장합니다.본, file2의 두 번째 열을 보고 file1에 저장된 열1과 일치하면 file2의 전체 줄을 인쇄합니다.
join
두 파일이 모두 정렬된 경우 다음 명령을 사용할 수도 있습니다(그렇지 않은 경우 sort
ing을 통해 정렬된 출력을 전달할 수 있음).
join -1 1 -2 2 file1 file2
~에서man join
-1 FIELD
join on this FIELD of file 1
-2 FIELD
join on this FIELD of file 2
파일이 정렬되지 않은 경우:
join -1 1 -2 2 <(sort file1) <(sort file2)