한 파일에서 "키 속성" 항목을 수집하여 다른 파일의 키 목록에 추가합니다.

한 파일에서 "키 속성" 항목을 수집하여 다른 파일의 키 목록에 추가합니다.

아래와 같이 2개의 파일을 받았습니다. 첫 번째 파일에는 다음 키가 포함되어 있습니다.

1
2
3

두 번째 파일에는 연관된 단일 항목이 있는 키가 포함되어 있습니다.

1  aa
2  ab 
3  ac
2 ad
1 ae
2 af 

동일한 키에 속하는 모든 항목을 수집하고 첫 번째 파일에 정의된 순서대로 한 줄에 인쇄하고 싶습니다.

1 aa ae 
2 ab ad af
3 ac 

누구든지 도와줄 수 있나요?

답변1

다음을 사용하여 이 작업을 수행하는 것이 실제로 가능하지만 다음 millerawk기반으로 하는 솔루션을 생각했습니다.

awk 'NR==FNR{if ($1 in map) map[$1]=map[$1] OFS $2; else map[$1]=$2; next}
     {print $1,map[$1]}' file2.txt file1.txt

그러면 두 번째 파일이 먼저 처리되고 동일한 "키"와 관련된 모든 "값"이 수집됩니다. 그런 다음 첫 번째 파일을 처리하여 각 키에 대한 "값" 목록을 출력합니다.

답변2

Perl 방법은 다음과 같습니다.

perl -e 'while(<>){
            chomp;
            @fields = split(/\s+/);
            push @{$values{$fields[0]}},$fields[1];
        }
        foreach $value (sort keys(%values)){
            print "$value @{$values{$value}}\n"
}' file2

또는 골프를 좋아한다면 다음과 같이 할 수 있습니다.

$ perl -lane 'push@{$k{$F[0]}},$F[1]}{print"$_ @{$k{$_}}"for sort keys %k' file2
1 aa ae
2 ab ad af
3 ac
    

그런 다음 에 있는 값만 인쇄하려면 file1다음으로 전달하면 됩니다 grep.

$ perl -lane 'push@{$k{$F[0]}},$F[1]}{print"$_ @{$k{$_}}"for keys %k' file2 | 
        grep -wf file1
1 aa ae
2 ab ad af
3 ac

관련 정보