Solved

Perl code question!

Posted on 2007-03-26
7
294 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
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 

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

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

I promised to write further about my project, and here I am.  First, I needed to setup the Primary Server.  You can read how in this article: Setup FreeBSD Server with full HDD encryption (http://www.experts-exchange.com/OS/Unix/BSD/FreeBSD/A_3660-S…
Using libpcap/Jpcap to capture and send packets on Solaris version (10/11) Library used: 1.      Libpcap (http://www.tcpdump.org) Version 1.2 2.      Jpcap(http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/index.html) Version 0.6 Prerequisite: 1.      GCC …
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.
In a previous video, we went over how to export a DynamoDB table into Amazon S3.  In this video, we show how to load the export from S3 into a DynamoDB table.

744 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now