두 개의 파일이 있습니다.
file1
:
905894
1197693
3703749
file2
:
905894 Test1
1197693 Test2
3703749 Test3
파일 1의 열 1에 있는 요소가 파일 2의 열 1에 있는 단어와 일치하는 경우 두 번째 열의 값을 가져오고 싶습니다.
나는 awk가 이것을 할 수 있다는 것을 알고 있지만 파일 1을 읽고 루프를 사용하는 데 멈춰 있습니다.
답변1
사용 grep
:
$ grep -wFf file1 file2
905894 Test1
1197693 Test2
3703749 Test3
-f
일치시킬 패턴(한 줄에 하나씩)을 취하고 있음을 나타냅니다.file1
-F
패턴은 고정 문자열에서 얻어집니다.file1
즉, 일치하기 전에 추가 조작이 필요하지 않습니다.-w
전체 단어 패턴을 포함하는 행을 일치시키고 있음을 나타냅니다. 단어 구성 문자 만[A-Za-z0-9_]
고려되며 다른 문자는 단어 구분 기호로 간주됩니다. 이렇게 하면905894abcd
열 내의 어떤 항목도 일치하지 않고 전체 열만 일치하게 됩니다 .
man grep
이에 대한 더 많은 아이디어를 확인해 보세요 .
답변2
나는 Perl을 직접 사용합니다.
- 파일 1을 읽고 숫자 목록을 추출합니다.
- 파일 2를 반복하고 숫자와 단어를 추출합니다.
- file2의 "number"가 file1에 있는지 확인하고 해당 단어가 있으면 인쇄합니다.
이 같은:
#!/usr/bin/perl
use strict;
use warnings;
my %in_file1;
open( my $file1, "<", "file1.txt" ) or die $!;
while (<$file1>) {
my ($number) = m/(\d+)/;
$in_file1{$number}++;
}
close($file1);
open( my $file2, "<", "file2.txt" ) or die $!;
while (<$file2>) {
my ( $number, $word ) = split;
if ( $in_file1{$number} ) { print $word, "\n"; }
}
close($file2);