awk/grep은 두 파일의 단어를 일치시킵니다.

awk/grep은 두 파일의 단어를 일치시킵니다.

두 개의 파일이 있습니다.

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);

관련 정보