in reply to Removing certain lines from array
Ouch. This should be a bit faster. The trick is to do a quick first pass through and count the number of occurrences of each (1st) word, and then go through a 2nd time and output only those lines where $words{$1} == 1.
#!/usr/bin/env perl use 5.012; use warnings FATAL => 'all'; my %words; # Number of times word appears first in a string my @lines = <DATA>; chomp @lines; $words{$_}++ for map { /^(\S+)/ ? $1 : () } @lines; say for grep { /^(\S+)/ ? $words{$1} == 1 : 1 } @lines; __DATA__ hello 1234 5698 7458 hi 1457 7459 6214 good_day 1458 hi 1258 3658 good_morning 4758 hi 1453 oneword hi
Output:
hello 1234 5698 7458 good_day 1458 good_morning 4758 oneword
|
|---|