06-07-2008
Well i converted it to qw and made lots of modifications and ended up with 2 versions of working code(late at night).One using find and copy modules,other using directory handler.I
Quote:
#!/usr/bin/perl -w
use File::Find;
use File::Copy;
%ftypes=qw(perl pl bash sh sed ed awk aw sh sh); #Put extensions associated with each type in hash
find(\&call,"."); #Call subroutine when file found
sub call
{
$var=$File::Find::name ;
if(-f $var) #Read only files
{
open(fh,$var) or die "Couldn't open file";
$line=<fh>;
if($line=~/^\#!.*?(\w+)\s+/){$dir=$1;$ext=$ftypes{$dir};} #Identify type from she-bang and extract extension from hash
if($var=~/(\w+\.)\w*/){$new=$1.$ext;} #In case file already contains extension,extract filename
else{$new=$var.".".$ext;}
mkdir $dir unless( -e $dir); #Make directory by type name
$newfile="./".$dir."/".$new;
$newfile=substr($newfile,2);
rename "$var", "./"."$new"; #Add proper extension by renaming
copy("$new","$newfile") or die "$!"; #Copy to created directory
close(fh);
}
}
And
Quote:
#!/usr/bin/perl
%ftypes=qw(perl pl bash sh sed ed awk aw sh sh); #Put extensions associated with type in hash
opendir dirhndl,"." or die "Cannot open directory:$!";
while($file=readdir(dirhndl))
{
next if $file =~ /^\.\.?$/;
open fh,$file;
$line=<fh>;
if($line=~/^\#!.*?(\w+)\s+/){$dir=$1;$ext=$ftypes{$dir};}#Identify type from she-bang and extract it
if($file=~/(\w+\.)\w*/){$new=$1.$ext;} #In case file already contains extension,extract filename
else{$new=$file.".".$ext;}
mkdir $dir unless( -e $dir); #Make directory by type name
$newfile="./".$dir."/".$new;
$newfile=substr($newfile,2);
rename "$file", "$newfile"; #Add proper extension and move to folder
close(fh);
}
closedir(dirhndl);
If there are any suggestions or bugs,please do tell,it would really help as I am learning Perl.
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
Dears,
I have the below data,
sss-aaaaaa
111211 222222 33333 22222 1163111
sss-vvvvvv
111311 224522 335633 24322 111511
sss-cccccc
111221 224522 333333 24322 111511
sss-dddddd
111211 222222 33333 22345222 113111
I want to make them like
... (7 Replies)
Discussion started by: yahyaaa
7 Replies
2. UNIX for Dummies Questions & Answers
Hello,
I am new to Linux, and I am learning slowly but for surely. I am trying to currently figure out how to go about re-arranging lines of text of a *.txt file... Like for example:
Say pool.txt has 20 lines of text, and the last 5 lines of text I want to move to the top of the *.txt file... (2 Replies)
Discussion started by: shorte85
2 Replies
3. Shell Programming and Scripting
Hello Guys,
I have around 100 hosts setup as alias in my profile for easy sshing.
alias ada='ssh -Y username@da.domain.com'
alias ast='ssh -Y username@terix.domain.com'
alias bb1='ssh -X username@ggserver.ns.domain.com'
.
.
.
.
I now would like to use sshmenu software in which... (4 Replies)
Discussion started by: upengan78
4 Replies
4. Shell Programming and Scripting
Hi there!
Can this be done with AWK? Several text files (file1, file2, etc) with different number of lines. Need to append each file to a Reference File (ReFile), and match each line of file1, file2 etc to the closest value in ReFile. Empty cells must be filled with NA, or 0. The number of lines... (2 Replies)
Discussion started by: sramirez
2 Replies
5. UNIX for Dummies Questions & Answers
I have thousand lines of data...:
A 1
B 2
C 3
D 4
E 5
A 21
B 22
C 23
D 24
E 25
A 31
B 32
C 33
D 34
E 35
...........
ON AND AND ON (3 Replies)
Discussion started by: bobo
3 Replies
6. Shell Programming and Scripting
Hi all,
I have input files in some directory as:
$ ls -ltr
-rw-r--r-- 1 emily us_cms 101614219 Oct 8 15:47 vgtree_197_0_7pV.root
-rw-r--r-- 1 emily us_cms 101348458 Oct 8 16:43 vgtree_518_0_LHB.root
-rw-r--r-- 1 emily us_cms 101386298 Oct 8 16:50 vgtree_291_0_cWd.root
-rw-r--r-- 1... (11 Replies)
Discussion started by: emily
11 Replies
7. Shell Programming and Scripting
Hello All,
Please find attached input and output files. I want to write a shell script to achieve this. I tried using awk but not getting how to do this as I am new to shell programming.
Thanks (4 Replies)
Discussion started by: Sudeep Bhattad
4 Replies
8. UNIX for Dummies Questions & Answers
Hi,
Please give a solution...
Current File
200101701 A 5 B 283 D 222
200085506 A 5 B 6 C 304
200081406 A 5
200101784 D 1111Desired Output
200101701 A 0005 B 0283 * * D 222 ... (4 Replies)
Discussion started by: satyar
4 Replies
9. Shell Programming and Scripting
I have a file with user activity and need to display only the start and end timestamp of the activity. I don't know how can we write an logic for this please help me in a bettr way to work on it
User Activity_log
-----------------------------------
... (5 Replies)
Discussion started by: lazydev
5 Replies
10. UNIX for Beginners Questions & Answers
By using this code how can we get the stars in inverted positions?
str="*"
for i in 1 2 3 4 5
do
echo "$str"
str="$str *"
done
The output should be like this
* * * * *
* * * *
* * *
* *
*
Please use CODE tags as required by forum rules!... (5 Replies)
Discussion started by: Meeran Rizvi
5 Replies
LEARN ABOUT OPENSOLARIS
diffmk
diffmk(1) User Commands diffmk(1)
NAME
diffmk - mark differences between versions of a troff input file
SYNOPSIS
diffmk oldfile newfile markedfile
DESCRIPTION
diffmk compares two versions of a file and creates a third version that includes "change mark" (.mc) commands for nroff(1) and troff(1).
oldfile and newfile are the old and new versions of the file. diffmk generates markedfile, which, contains the text from newfile with
troff(1) "change mark" requests (.mc) inserted where newfile differs from oldfile. When markedfile is formatted, changed or inserted text
is shown by | at the right margin of each line. The position of deleted text is shown by a single *.
USAGE
See largefile(5) for the description of the behavior of diffmk when encountering files greater than or equal to 2 Gbyte ( 2^31 bytes).
EXAMPLES
Example 1 An example of the diffmk command.
diffmk can also be used in conjunction with the proper troff requests to produce program listings with marked changes. In the following
command line:
example% diffmk old.c new.c marked.c ; nroff reqs marked.c | pr
the file reqs contains the following troff requests:
.pl 1
.ll 77
.nf
.eo
.nh
which eliminate page breaks, adjust the line length, set no-fill mode, ignore escape characters, and turn off hyphenation, respectively.
If the characters | and * are inappropriate, you might run markedfile through sed(1) to globally change them.
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Availability |SUNWdoc |
+-----------------------------+-----------------------------+
SEE ALSO
diff(1), nroff(1), sed(1), troff(1), attributes(5), largefile(5)
BUGS
Aesthetic considerations may dictate manual adjustment of some output. File differences involving only formatting requests may produce
undesirable output, that is, replacing .sp by .sp 2 will produce a "change mark" on the preceding or following line of output.
SunOS 5.11 14 Sep 1992 diffmk(1)