blob: 619a0ec4ff9770e7258d26ec681386add6550a9b [file] [log] [blame]
#!/usr/bin/perl
#
# Copyright Statement:
# --------------------
# This software is protected by Copyright and the information contained
# herein is confidential. The software may not be copied and the information
# contained herein may not be used or disclosed except with the written
# permission of MediaTek Inc. (C) 2005
#
# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
#
# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
#
# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
#
#
#*****************************************************************************
#*****************************************************************************
##*
##* Filename:
##* ---------
##* cat.pl
##*
##* Project:
##* --------
##* Maui_Software
##*
##* Description:
##* ------------
##* This script concatenate files and print on the standard output
##
##* Author:
##* -------
##* kk Lin-Wang (mtk04222)
##*
##*============================================================================
use strict;
use warnings;
my @target = "";
my $column = -1;
my $binmode = -1;
# parse parameters
foreach my $arg (@ARGV)
{
if ($arg =~ /^\-cut=(\d+)\b/i)
{
print "$1\n";
$column = $1;
($column < 0) && &Usage;
}
elsif ($arg =~ /^-binary\b/i)
{
$binmode = 1;
}
else
{
push(@target,$arg);
}
}
($#target < 0) && &Usage;
# replace backslash with slash
foreach my $arg (@target)
{
$arg =~ s/\\/\//g;
}
# print each file content
my @fs = glob("@target");
&printAllContent(@fs) if($column == -1);
&printCutContent(@fs) if($column != -1);
#******************************************************************************
## FUNCTION
## printAllContent
##******************************************************************************
sub printAllContent
{
foreach my $file (@_)
{
open FH, $file or die "[cat.pl][Error:] Failed to open [$file]";
if($binmode eq 1)
{
binmode FH;
binmode STDOUT;
}
print while(<FH>);
close FH;
}
}
#******************************************************************************
## FUNCTION
## printCutContent
##******************************************************************************
sub printCutContent
{
my @line = ();
foreach my $file (@_)
{
open FH, $file or die "[cat.pl][Error:] Failed to open [$file]";
while(<FH>)
{
@line = split(' ',$_);
next if($#line < $column);
if($line[$column] ne "")
{
print $line[$column];
print "\n";
}
}
close FH;
}
}
sub Usage
{
warn <<"_END_OF_USAGE";
Usage:
cat.pl [source[file1, files2]]
Example:
perl cat.pl file1.c file2.c
perl cat.pl *.cpp *.c
perl cat.pl -cut=1 in.txt
perl cat.pl -binary foo.bin
Description:
This script concatenate files and print on the standard output.
-cut=number only output the [#number] column in each line.
-binary read/write as binary mode
[ex1]:
in.txt:
string0 string1 string2
dog cat frog
command:
perl cat.pl -cut=1 in.txt
output:
string1
cat
_END_OF_USAGE
exit 1;
}