Visit The New, Modern Unix Linux Community


Looping through input/output


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Looping through input/output
# 22  
To solve this issue of mine, I've done something not very elegant: I've written 5.427 commands with all the files to merge and just made an executable file with all the commands copy pasted there. This is how it looks like (for the first 11 files):

Code:
./match.pl  -f 9464294024_R01C01header -g 9466656017_R01C01header -k 1 -l 1 -v "5 6 7" > ./result/1
./match.pl  -f 9464294024_R01C02header -g ./result/1 -k 1 -l 1 -v "5 6 7" > ./result/2
./match.pl  -f 9464294024_R02C01header -g ./result/2 -k 1 -l 1 -v "5 6 7" > ./result/3
./match.pl  -f 9464294024_R02C02header -g ./result/3 -k 1 -l 1 -v "5 6 7" > ./result/4
./match.pl  -f 9464294024_R03C01header -g ./result/4 -k 1 -l 1 -v "5 6 7" > ./result/5
./match.pl  -f 9464294024_R03C02header -g ./result/5 -k 1 -l 1 -v "5 6 7" > ./result/6
./match.pl  -f 9464294024_R04C01header -g ./result/6 -k 1 -l 1 -v "5 6 7" > ./result/7
./match.pl  -f 9464294024_R04C02header -g ./result/7 -k 1 -l 1 -v "5 6 7" > ./result/8
./match.pl  -f 9464294024_R05C01header -g ./result/8 -k 1 -l 1 -v "5 6 7" > ./result/9
./match.pl  -f 9464294024_R05C02header -g ./result/9 -k 1 -l 1 -v "5 6 7" > ./result/10

I've used numbers to name the output files as it was easier to loop them for writing. The commands work without any problem. And I've got my output.

I must admit that I do not understand the script you've provided, nor the diagnostics (I'm a beginner, posting in the forum for beginners) and, thus, cannot comment on your statement of your script working or what the diagnostics say. I'm grateful for your time and help, but am a bit baffled as to why the general consensus is that the only possible explanations to this situation are in two possibilities (1) my perl script having a problem or (2) I'm not providing truthful/good information.
# 23  
if you are looking for a loop then you could use a quick 'for' loop in the directory where match.pl file is present.


Code:
./match.pl  -f 9464294024_R01C01header -g 9466656017_R01C01header -k 1 -l 1 -v "5 6 7" > ./result/1
for f in `seq 2 10`
do
./match.pl  -f 9464294024_R01C01header -g 9466656017_R01C01header -k 1 -l 1 -v "5 6 7" > ./result/$f
done

# 24  
Quote:
Originally Posted by zajtat
I must admit that I do not understand the script you've provided, nor the diagnostics (I'm a beginner, posting in the forum for beginners) and, thus, cannot comment on your statement of your script working or what the diagnostics say.
OK, no problem, but why don't you, on the other hand, just trust Don Cragun that he knows what he talks about? If you just provide him with the necessary information he might just find out (and then explain it to you), but instead:

Quote:
Originally Posted by zajtat
but am a bit baffled as to why the general consensus is that the only possible explanations to this situation are in two possibilities (1) my perl script having a problem or (2) I'm not providing truthful/good information.
you just said something amounting to "no, that can't be". First: about the truthfulness or quality of the information: you just might have ommitted some vital point because you didn't recognise it as being vital. I do not say this is the case but it might be. And even if this is the case: you are a beginner - you are supposed to not get it right every time. There are no bad feelings, it is just about finding out the culprit.

Now, the second point: maybe the perl script you have has a problem, maybe not. If it does it would be simple enough to test: rename one of the files to "0" (as the name Dons script used) and try it manually. If you get the same result Dons suspicion about the perl script being the problem is proven and there is no shame in saying so. You might still decide then to use the workaround you used now, but you would learned something about the script. Maybe you get a correct result and that would prove Dons suspicion wrong. In this case just write here "i have tried that with the command XXXX and got the correct result of YYYYY and therefore your reasoning is wrong. This in turn helps us finding out what indeed the problem is and might lead to some (other) solution. This is how an expert would have handled that.

Either way, this is the way we (not only we in this forum, but UNIX admins everywhere) work: we have an unexplainable problem, we create theories of what is going on, then create testbeds to prove/disprove these theories until we finally find a solution. And more than amassing factual knowledge will getting into this mindset help you advancing from beginner to seasoned to expert.

I hope this helps.

bakunin
These 4 Users Gave Thanks to bakunin For This Post:
# 25  
Quote:
Originally Posted by zajtat
I was going through the post again to look over things and have double-checked that the perl script works fine with files that have numbers as names. There are no bugs in perl script and there has never been such a problem, that's why I've answered a question about the name of the output file that it does not matter. I did try to provide clear information and answer all the questions to the best of my abilities and I apologise that it was not understandable. Thank you all of your time and help once more!
Apologies for any typos.

But was it tested with a file named 0, zero? Looking at your alternative code there is NO 0, zero, file generated at all; your files start with the number 1.

We are not trying to belittle you, just glean as much information as possible to satisfy your requirements. You have no idea how difficult some problems are for volunteers on here, and remember we ARE volunteers, to solve with limited or incorrect information. Until late into this thread no-one even knew about a Perl script and the error report pointed straight to an unknown script at that time. If we had the Perl script to view the Perl experts on here would have probably solved your problem without ANY errors from either the Perl or the Shell scripts well inside in less than 20 odd replies.

There can't be anything so secret about your Perl script that you cannot show it to us.

Your Perl script might need a specific _library_/module and that module may be causing this error, who knows, we don't, as we do not have this script to view.

Please oh please, for everyones' sanity, give as much information as possible so that the big guns on here, who give their time for free, can supply you with a solution ASAP.
# 26  
Thank you all for your comments and suggestions. I do understand that the solution to any problem is proper communication and my point was that since we are communicating in writing only, even with best intentions and the biggest trust in the world, it is easy to get misunderstood or be misunderstood (both ways, not one way only). In any case, I apologise once again for not being able to provide an explanation that would be understandable to everyone or share every script. I do understand that it prevents people in this forum from helping me and have solved the problem in other way. Many thanks everyone for your time and help!

Last edited by zajtat; 08-22-2016 at 07:09 PM..
# 27  
Quote:
Originally Posted by zajtat
To solve this issue of mine, I've done something not very elegant: I've written 5.427 commands with all the files to merge and just made an executable file with all the commands copy pasted there. This is how it looks like (for the first 11 files):

Code:
./match.pl  -f 9464294024_R01C01header -g 9466656017_R01C01header -k 1 -l 1 -v "5 6 7" > ./result/1
./match.pl  -f 9464294024_R01C02header -g ./result/1 -k 1 -l 1 -v "5 6 7" > ./result/2
./match.pl  -f 9464294024_R02C01header -g ./result/2 -k 1 -l 1 -v "5 6 7" > ./result/3
./match.pl  -f 9464294024_R02C02header -g ./result/3 -k 1 -l 1 -v "5 6 7" > ./result/4
./match.pl  -f 9464294024_R03C01header -g ./result/4 -k 1 -l 1 -v "5 6 7" > ./result/5
./match.pl  -f 9464294024_R03C02header -g ./result/5 -k 1 -l 1 -v "5 6 7" > ./result/6
./match.pl  -f 9464294024_R04C01header -g ./result/6 -k 1 -l 1 -v "5 6 7" > ./result/7
./match.pl  -f 9464294024_R04C02header -g ./result/7 -k 1 -l 1 -v "5 6 7" > ./result/8
./match.pl  -f 9464294024_R05C01header -g ./result/8 -k 1 -l 1 -v "5 6 7" > ./result/9
./match.pl  -f 9464294024_R05C02header -g ./result/9 -k 1 -l 1 -v "5 6 7" > ./result/10

I've used numbers to name the output files as it was easier to loop them for writing. The commands work without any problem. And I've got my output.

I must admit that I do not understand the script you've provided, nor the diagnostics (I'm a beginner, posting in the forum for beginners) and, thus, cannot comment on your statement of your script working or what the diagnostics say. I'm grateful for your time and help, but am a bit baffled as to why the general consensus is that the only possible explanations to this situation are in two possibilities (1) my perl script having a problem or (2) I'm not providing truthful/good information.
My script was just using two output files named 0
and 1 instead of 5,426 output files named ./result/1 through ./result/5246. For the sequence of commands shown above that your script produces, my script would have created the commands:
Code:
./match.pl  -f 9464294024_R01C01header -g 9466656017_R01C01header -k 1 -l 1 -v "5 6 7" > 0
./match.pl  -f 9464294024_R01C02header -g 0 -k 1 -l 1 -v "5 6 7" > 1
./match.pl  -f 9464294024_R02C01header -g 1 -k 1 -l 1 -v "5 6 7" > 0
./match.pl  -f 9464294024_R02C02header -g 0 -k 1 -l 1 -v "5 6 7" > 1
./match.pl  -f 9464294024_R03C01header -g 1 -k 1 -l 1 -v "5 6 7" > 0
./match.pl  -f 9464294024_R03C02header -g 0 -k 1 -l 1 -v "5 6 7" > 1
./match.pl  -f 9464294024_R04C01header -g 1 -k 1 -l 1 -v "5 6 7" > 0
./match.pl  -f 9464294024_R04C02header -g 0 -k 1 -l 1 -v "5 6 7" > 1
./match.pl  -f 9464294024_R05C01header -g 1 -k 1 -l 1 -v "5 6 7" > 0
./match.pl  -f 9464294024_R05C02header -g 0 -k 1 -l 1 -v "5 6 7" > 1

and the trace output log you showed us said that the line shown in red above failed with the diagnostic message:
Code:
Must specify file one using -g switch

What output do you get when you run the first three of the above sequence of commands manually?

The commands in your script are logically equivalent to the commands my script was trying to run, but didn't need the extra disk space for 5,245 temporary files that your script produces. If all 5,247 of the commands like those above had succeeded, my script would have then moved the last temporary output file (either 0 or 1) to a file named outfile and then would have removed the other temporary file.

I certainly don't claim that all of the code I produce is perfect. But the trace output you showed us from running my script (as you modified it to run your perl script) shows that commands like those shown above were being run and that the command shown in red above failed when there doesn't seem to be any reason that you have explained to us why it should not succeed. My belief is that there is something about the filename 0 that match.pl doesn't like, but without understanding why it doesn't like it (and what other filenames it doesn't like), I don't know how complex I need to make the trivial code that switches between files 0 and 1 to produce filenames that will be accepted.

Just saying that my code doesn't work doesn't help me help you. Showing us the contents of match.pl or telling us the restrictions match.pl places on -g option option-argument values would help us help you. We want to help you.

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #193
Difficulty: Easy
Python was selected the Programming Language of the Year in 2007, 2010, and 2018.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Looping over output of 'ls'

Hi, I have some output from 'ls' command and I want to loop over the output in a bash script. What would be a good way to go about it? For example, if the output of the ls command gives me 'prefix1 prefix2 prefix3', how can I set a loop that will iterate over these? many thanks! (5 Replies)
Discussion started by: pc2001
5 Replies

2. UNIX for Dummies Questions & Answers

Looping through the contents of array for output name

Hi all, I am trying to loop through the string contents of an array, to add it during the saving of the output files. I am trying this code to print each column and save it to unique file name, but it doesn't work. Thanks for any help. fnam=(japan usa uk) alldata.dat contained sample data... (1 Reply)
Discussion started by: ida1215
1 Replies

3. Shell Programming and Scripting

looping and saving output of each line separately

I have been trying this program for a long time. I am trying to read a file named "odon" line by line; read the first line, send it to do a command saved in a file "perm", once the first line has finished going through the content of the file perm, the result is saved with the number of the line.... (17 Replies)
Discussion started by: iconig
17 Replies

4. Shell Programming and Scripting

Looping through for user input

Legends, I want to remain in the script until user passes the correct name. I had tried the below code; but it didn't work out. Please help echo "\nPlease enter the source system: \c" while read SYSTEM_NAME do if ]; then echo "\nMaking $SYSTEM_NAME as source system for particular... (5 Replies)
Discussion started by: sdosanjh
5 Replies

5. Solaris

SVM Solaris 8 Problem. Metastat output looping

Hi friends, I'm newbie to SVM. Just wanna try installed it on one of our server (to do mirroring for disk0 and disk1) but i think im lost until now. :( the steps i've taken is as below:- 1.prtvtoc /dev/rdsk/c1t0d0s2 | fmthard -s - /dev/rdsk/c1t1d0s2 2.metadb -a -c 3 -f c1t0d0s7... (3 Replies)
Discussion started by: kronenose
3 Replies

6. Shell Programming and Scripting

Dynamic output file generation using a input text file with predefined output format

Hi, I have two files , one file with data file with attributes that need to be sent to another file to generate a predefined format. Example: File.txt AP|{SSHA}VEEg42CNCghUnGhCVg== APVG3|{SSHA}XK|"password" AP3|{SSHA}XK|"This is test" .... etc --------- test.sh has... (1 Reply)
Discussion started by: hudson03051nh
1 Replies

7. Shell Programming and Scripting

perl: looping through the output of a 'system' command

Hi there could anybody point me in the right direction when it comes to looping through the output of a system command in perl (i.e. df -k) doing a test against each line to see if it matches? for example if i have a df -k output like this and I wanted to grab the lines that matched "sda" or... (3 Replies)
Discussion started by: rethink
3 Replies

8. Shell Programming and Scripting

input -output file

Hi, I am having an Input file .which is having a list of names. comapring with our database , needs to write the out put in file called output.txt , format should be name--> country--->phone number could you please help me.. thanks in advance (7 Replies)
Discussion started by: hegdeshashi
7 Replies

9. UNIX for Advanced & Expert Users

input/Output settings

How can we view all the input/output settings of unix environment for a session (6 Replies)
Discussion started by: paritoshc
6 Replies

10. Shell Programming and Scripting

Using Output from one command as input to another

This site has been very helpful thus far.. I thank you all in advance for sharing the knowledge. Let me get to it. I am trying to write a very small script to take away from the boredom of doing the same thing over and over. Everynow and again I have to get the hex value of a file using a... (2 Replies)
Discussion started by: BkontheShell718
2 Replies

Featured Tech Videos