2015-03-13 3 views
-2

Я хочу обработать некоторые данные на основе twitter с помощью Perl-скрипта. Файл находится в формате csv.Perl script: Удаление саморасширяющихся строк

Я хочу, чтобы удалить себя адресация упоминает

столбец CSV и данные таким образом, например

user, mention(user), message 
vims789, vnjuei234, yea this is good 
dfion, youwen12, this is win 
don234, don234, this is green 
wen123, tileas, this is blue 

Дубликат который "don234, don234" упоминая себя, линия должна быть удалена. Пример

пользователя, упомяните (пользователь), сообщение
vims789, vnjuei234, да это хорошо
dfion, youwen12, это выиграть
wen123, tileas, это синий

+3

Что вы получили до сих пор, и какие проблемы являются у вас есть? – Sobrique

+0

Сначала я попробовал тривиальный «sort FILE | uniq -c», который дал неверные результаты; – Richardsop

ответ

0

Может быть что-то вроде этого:

#!/usr/bin/perl 
use strict; 
use warnings; 

use Text::CSV; 
my $csv = Text::CSV->new(); 

while (my $row = $csv->getline(\*DATA)) { 
    my ($user, $mention, $message) = @$row; 
    print $message,"\n" unless $user eq $mention; 
} 
__DATA__ 
user, mention(user), Message 
vims789, vnjuei234, yea this is good 
dfion, youwen12, this is win 
don234, don234, this is green 
wen123, tileas, this is blue 
+0

Если это действительно данные, которые OP имеет тогда «Text :: CSV», это не так много, потому что он ограничивает разделитель полей одним символом ASCII. Я рекомендую 'split/\ s *, \ s * /', поскольку я думаю, что сомнительно, что перед запятой всегда есть ровно одно пробел и нулевые пробелы. – Borodin

0

Вы можете сделать это очень быстро с обратной ссылкой. Так как вы хотите найти что-то, запятую, некоторое пространство, а затем что-то опять же, при условии, что строка будет все символы слова, это должно работать:

my $regex 
    = qr{^ # beginning of the line 
      (\w+) # A "word" 
      ,  # A comma 
      \s+ # space 
      \1 # a back reference to the first capture. 
      \b # demand that it end the sequence of word characters. 
     }x; 

my @filtered_lines = grep { !m/$regex/ } @lines; 
Смежные вопросы