searchPatternInColumn pl.Ver1p1
1. Introduction
Searching for a pattern as a string or regular expression ( perl syntax ) in a file in the specified column.
2. Uses and Guidelines (Optional)
usage: ./searchPatternInColumn.pl.Ver1p1 <Input file> <delimiter> <Pattern file> <columnNumber>
· Operating System UNIX
· Language/Tools used for development Shell
3. Code
#!/usr/bin/perl
#$Id: test.pl,v 2.0 2004/10/08 13:00:03 kumap Exp $
# Performs the same feature of “cut” in shell scripts.
sub splitValue()
{
my $target = $_[0];
my $delimiter = $_[1];
my $fieldNum = $_[2];
my @tempArray = split(/$delimiter/, $target);
return $tempArray[$fieldNum - 1];
}
if ( @ARGV != 4 )
{
print “usage: $0 <Input file> <delimiter> <Pattern file> <columnNumber>\n”;
exit (1);
}
my $inputFile = $ARGV[0];
my $delimiter = $ARGV[1];
my $patternFile = $ARGV[2];
my $columnNum = $ARGV[3];
print ” Arguments = ” ;
print “@ARGV” ;
print “\n” ;
$columnNum = $columnNum – 1;
print ” *) Converting column number to index : $columnNum”;
if ( $columnNum < 0 )
{
print “\n *) Invalid column number\n”;
exit (1);
}
open (PATTERN_FILE, “<$patternFile”) || die “Error: Could not open $patternFile for reading”;
open (INPUT_FILE, “<$inputFile”) || die “Error: Could not open $inputFile for reading”;
open (OUTPUT_FILE, “>${inputFile}.out”) || die “Error: Could not open ${inputFile}.out for writing”;
$index = 0;
while ($line = <PATTERN_FILE>)
{
chomp($line);
$patternArray [ $index ] = $line;
$patternArrayHash { “$line” } = 0;
$index++;
}
$maxIndex=$index-1;
$index = 0;
while ( $line = <INPUT_FILE>)
{
chomp($line);
print ” \n *) Input: $line \n”;
@lineArray = split(/$delimiter/,$line);
#for ( $i=0; $i <= $maxIndex; $i++)
#{
# $pattern=$patternArray [ $i ];
# print ” *) Pattern : $pattern \n”;
# print ” *) Column : $lineArray[$columnNum] \n”;
# #if ( $lineArray [ $columnNum ] eq $pattern )
# if ( $lineArray [ $columnNum ] =~ /^$pattern$/ )
# {
# print OUTPUT_FILE “$line\n”;
# print “$line\n”;
# }
#}
for $pattern ( keys %patternArrayHash )
{
print ” *) Pattern : $pattern \n”;
print ” *) Column : $lineArray[$columnNum] \n”;
if ( $lineArray [ $columnNum ] =~ /^$pattern$/ )
{
print OUTPUT_FILE “$line\n”;
print “$line\n”;
}
}
}
close(DISPLAY_DETAILS_FILE);
close(INPUT_FILE);
close(PATTERN_FILE);
4. Limitation of the component
Within Shell/Unix environment
Tags: coding, coding tips, Perl, perl scripts, Searching for a pattern as a string or regular expression, technical FAQ, technical tips