?
Solved

Perl code question!

Posted on 2007-03-26
7
Medium Priority
?
302 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 85

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
Transaction-level recovery for Oracle database

Veeam Explore for Oracle delivers low RTOs and RPOs with agentless transaction log backup and transaction-level recovery of Oracle databases. You can restore the database to a precise point in time, even to a specific transaction.

 

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 85

Accepted Solution

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

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

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

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

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

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

Installing FreeBSD… FreeBSD is a darling of an operating system. The stability and usability make it a clear choice for servers and desktops (for the cunning). Savvy?  The Ports collection makes available every popular FOSS application and packag…
Introduction Regular patching is part of a system administrator's tasks. However, many patches require that the system be in single-user mode before they can be installed. A cluster patch in particular can take quite a while to apply if the machine…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…
Suggested Courses
Course of the Month14 days, 6 hours left to enroll

809 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