56 lines
		
	
	
		
			992 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			992 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/usr/bin/env perl | ||
|  | 
 | ||
|  | # Finds duplicate adjacent words. | ||
|  | # http://matt.might.net/articles/shell-scripts-for-passive-voice-weasel-words-duplicates/ | ||
|  | 
 | ||
|  | use strict ; | ||
|  | 
 | ||
|  | my $DupCount = 0 ; | ||
|  | 
 | ||
|  | if (!@ARGV) { | ||
|  |   print "Usage: dups <file> ...\n" ; | ||
|  |   exit ; | ||
|  | } | ||
|  | 
 | ||
|  | while (1) { | ||
|  |   my $FileName = shift @ARGV ; | ||
|  | 
 | ||
|  |   # Exit code = number of duplicates found. | ||
|  |   exit $DupCount if (!$FileName) ; | ||
|  | 
 | ||
|  |   open FILE, $FileName or die $!; | ||
|  | 
 | ||
|  |   my $LastWord = "" ; | ||
|  |   my $LineNum = 0 ; | ||
|  | 
 | ||
|  |   while (<FILE>) { | ||
|  |     chomp ; | ||
|  | 
 | ||
|  |     $LineNum ++ ; | ||
|  | 
 | ||
|  |     my @words = split (/(\W+)/) ; | ||
|  | 
 | ||
|  |     foreach my $word (@words) { | ||
|  |       # Skip spaces: | ||
|  |       next if $word =~ /^\s*$/ ; | ||
|  | 
 | ||
|  |       # Skip punctuation: | ||
|  |       if ($word =~ /^\W+$/) { | ||
|  |         $LastWord = "" ; | ||
|  |         next ; | ||
|  |       } | ||
|  | 
 | ||
|  |       # Found a dup? | ||
|  |       if (lc($word) eq lc($LastWord)) { | ||
|  |         print "$FileName:$LineNum $word\n" ; | ||
|  |         $DupCount ++ ; | ||
|  |       } # Thanks to Sean Cronin for tip on case. | ||
|  | 
 | ||
|  |       # Mark this as the last word: | ||
|  |       $LastWord = $word ; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   close FILE ; | ||
|  | } |