Solved

Perl code question!

Posted on 2007-03-26
7
297 Views
Last Modified: 2010-04-22
I am trying to create a file of file names in a directory. Here is my script:

-------------------------------------------------------
#!/bin/ksh

#Parameters
# $1: /devetl/ptqs/DFS2_Assr_03_02/

cd "$1"

/bin/ls FinalFile*.txt* > Out.fil
perl -i -ne 's/FinalFile/,FinalFile/g; print;' Out.fil
cat Out.fil | perl -e '@f=<STDIN>; $f[$#f] =~ s/(.*),(.*)/$1$2/; print @f;' > Out2.txt

#Remove the extra ^@ characters that appreas in the file
rm -f Out.fil
tr -d '\n' <Out2.txt > Out.fil
rm -f Out2.txt
cat Out.fil
-------------------------------------------------------

The input parameter, $1, is the directory path.

The files in my directory are:
FinalFile1.txtaa
FinalFile1.txtab
FinalFile2.txtaa
FinalFile2.txtab

I would like them in this format:
FinalFile1.txtaa,FinalFile1.txtab,FinalFile2.txtaa,FinalFile2.txtab

The output I get from the script above is:
,FinalFile1.txtaa,FinalFile1.txtab,FinalFile2.txtaaFinalFile2.txtab

Note that the last comma separator is missing.

One major flaw in the script above is that, it uses $2 as the second
parameter eventhough only one parameter is passed in. This errors out if I
remove the $2 from the $1$2 which is strange!

Any help would be appreciated.
0
Comment
Question by:soccerplayer
  • 4
  • 3
7 Comments
 
LVL 84

Expert Comment

by:ozo
ID: 18794661
perl -le 'print join",",<FinalFile*.txt*>' >Out.fil
0
 

Author Comment

by:soccerplayer
ID: 18794688
ozo, where does this line go in the script?
0
 

Author Comment

by:soccerplayer
ID: 18794694
Also, can you explain the line so that I can learn? Thanks.
0
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 

Author Comment

by:soccerplayer
ID: 18794742
ozo, two questions.
1)How come we are not using the passed in parameter, $1, which is the directory path, anywhere?
2)Can I replace "FinalFile" by a second parameter? That is, wherever "FinalFile"
appears, can I replace it with "$2"?
0
 
LVL 84

Accepted Solution

by:
ozo earned 500 total points
ID: 18794787
#!/bin/ksh

#Parameters
# $1: /devetl/ptqs/DFS2_Assr_03_02/

cd "$1"
perl -e "print join',',<$2*.txt*>"
0
 
LVL 84

Expert Comment

by:ozo
ID: 18795102
<FinalFile*.txt*>
is a lis of filenames
perldoc -f glob
join ','
puts ',' between elements of a list
perldoc -f join
print
prints
perldoc -f print
0
 

Author Comment

by:soccerplayer
ID: 18795330
Thank you very much for the solution. Worked like a charm!
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Hello fellow BSD lovers, I've created a patch process for patching openjdk6 for BSD (FreeBSD specifically), although I tried to keep all BSD versions in mind when creating my patch. Welcome to OpenJDK6 on BSD First let me start with a little …
The purpose of this article is to demonstrate how we can upgrade Python from version 2.7.6 to Python 2.7.10 on the Linux Mint operating system. I am using an Oracle Virtual Box where I have installed Linux Mint operating system version 17.2. Once yo…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question