perl -ne '/^[0-9]+,[0-9]+,(.+)/ && ++$a{$1} ;print "$_" if $a{$1}==1'
То, что вы опубликовали, также включало печать значения $ a {$ 1}.
Я предполагаю, что это было для отладки.
Я вынул "\ n", потому что уже есть перевод строки в $ 1.
Если вы хотите изменить это, используйте chomp в начале строки.
Хотя использование && в одной строке изящно, я думаю, что это будет
хороший совет, чтобы попытаться написать Perl в реальном отформатированном блоке. Это будет
помочь вам лучше учиться и легче отлаживать.
Глядя на вашу линию, не сразу легко увидеть, каково истинное намерение
print $_ if $a{$1}>0
Лучший подход к обучению (на мой взгляд) был бы чем-то похожим
на это:
perl -ne '/^[0-9]+,[0-9]+,(.+)/ and do{
if ( ! exists $a{$1} ){
print "$_";
};
$a{$1}=1;
}'