输入文件(包含第 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
为您想要的输出文件的实际名称即可。
警告
如果输出文件存在,这将破坏它。如果您想附加到它,请更改">"
为">>"
第三行。