다음과 같은 파일이 있습니다.
파일 1:
id1 id6
id5 id2
id2 id3
id6 id500
두 번째 열의 내부를 첫 번째 열의 내부와 비교해 보면 두 번째 열과 첫 번째 열 모두에 id6과 id2가 존재하는 것을 알 수 있습니다. 하지만 id3과 id500은 첫 번째 열이 아닌 두 번째 열에 존재합니다. 나는 첫 번째 열에 나타나지 않기 때문에 후자를 0으로 바꾸고 싶습니다. 따라서 출력은 다음과 같아야 합니다.
산출:
id1 id6
id5 id2
id2 0
id6 0
어떤 제안이 있으십니까? "join"에서 몇 가지 명령을 시도했지만 원하는 결과를 얻지 못했습니다. 내 실제 데이터는 상당히 큽니다. 이는 작은 예입니다.
답변1
2단계 솔루션 - 첫 번째 단계에서는 필드 1의 모든 값을 배열에 저장하고 a
, 두 번째 단계에서는 각 행을 인쇄하고, 두 번째 필드가 배열에 없으면 0으로 설정합니다.a
awk 'first{a[$1]; next}; {print $1, !($2 in a)? 0: $2}' first=1 file first=0 file
답변2
#/bin/perl
use strict;
use warnings;
my %hash;
my @array;
my( $key, $value );
while( <ARGV> )
{
chomp;
@array = split '\t';
$hash{ $array[0] } = $array[1];
}
while(( $key, $value ) = each %hash )
{
printf "$key\t%s\n",
exists( $hash{ $value }) ? $value : "0";
}
그러나 "거대한"이 무엇을 의미하는지 잘 모르겠습니다. 이는 데이터 크기에 관계없이 얼마나 많이 사용하는지를 의미합니다. 죄송합니다. POSIX 명령 유형 솔루션을 찾고 계시다면 이전에 이 포럼에서 답변한 적이 없습니다.