需要使用grep和sort来匹配记录并显示Y和N

需要使用grep和sort来匹配记录并显示Y和N

输入文件(包含第 1 列,其中数字重复值,第二列可能包含语音、电子邮件、电话、语音邮件):

123,voice
123, tel
324,voice mail
345,email
123,email

输出文件带有标题,Y如果它们在第二列中有任何值,则为必需N

number,voice,voice mail,tel,email
123,Y,N,Y,N,Y
324,N,Y,N,N,N
345,N,N,N,N,Y

答案1

Perl 解决方案:

perl -F'\s*,\s*' -lane '
    BEGIN{ $outfile = "output_file_name";
           open $OUTFILE , ">" , $outfile
    }
    $h{$F[0]}{$F[1]}++;
    END{
        $i{$_}++ for map {keys $h{$_}} keys %h;
        print $OUTFILE "number,".join ",",sort keys %i;
        for $number (keys %h) {
           $string = "$number,";
           $string .= $h{$number}{$_} ? "Y," : "N," for keys %i;
           $string =~ s/,$//;
           print $OUTFILE $string
        }
    } ' input_file

代码经过测试并适用于您的示例输入。只需修改output_file_name为您想要的输出文件的实际名称即可。

警告

如果输出文件存在,这将破坏它。如果您想附加到它,请更改">"">>"第三行。

相关内容