Run script on multiple files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Run script on multiple files
# 1  
Old 01-11-2014
Run script on multiple files

I have a script that I need to run on one file at a time. Unfortunately using for i in F* or cat F* is not possible. When I run the script using that, it jumbles the files and they are out of order. Here is the script:

Code:
gawk '{count[$2]++; keyword[$2] = $1}
END {
for (k in count)
{if (count[k] == 2) keyword[k] = "rearranging"
if (count[k] == 3) keyword[k] = "deleting"
if (count[k] > 3)  print k ": Volumes has more than 3 repeats" > /dev/stderr
else print keyword[k] " " k
}
}'

I have a number of files, all F* files that I need to apply it to, but I don't want the order of the files changed.

When I apply it to one file it works great, when I try to do for i in F* or while read file it jumbles the lines out of order.

Example of files:

Code:
cat F31
-==> /tmp/QCZ-RELAY-FILER_TASK-LIST <==
deleting   /vol/xyz_ent_0501
deleting   /vol/xyz_ent_0365
deleting   /vol/xyz_ent_0399
rearranging  /vol/xyz_ent_0363
rearranging  /vol/xyz_ent_0365
rearranging  /vol/xyz_ent_0393
rearranging  /vol/xyz_ent_0394
rearranging  /vol/xyz_ent_0399
rearranging  /vol/xyz_ent_0916
rearranging  /vol/xyz_ent_0494
rearranging  /vol/xyz_ent_0501
deleting   /vol/isis_root
deleting   /vol/xyz_ent_0393
deleting   /vol/xyz_ent_0494
deleting   /vol/xyz_ent_0394
deleting   /vol/xyz_ent_0363
deleting   /vol/xyz_ent_0916
deleting   /vol/xyz_ent_0916
rearranging  /vol/xyz_root

Code:
cat F20
--- SINGAPORE-QCX-RELAY-SERVER_TASK-LIST     
deleting   /vol/repository_vol10
deleting   /vol/repository_vol11
rearranging  /vol/repository_vol10
rearranging  /vol/repository_vol11
lab-nbu{528}$

I have also tried something like this:

Code:
for i in F*; do count=$((count+1)); cat F*  | sed -n "$count"p); /tmp/script_0108; done


But this halts. It seems that there is no way to use the regular for i in F* or anything similar, as it treats the files as a whole rather than working through them one by one

Is there a way to apply this script to one file at a time, pause and then have it go to the next file? For example, for the script to run on one file, then finish that iteration of its run, and go to the next file and then work on it?
# 2  
Old 01-11-2014
What is the order then?
If you know it, why not put it in a file and use while loop with read
# 3  
Old 01-11-2014
Code:
for i in F*; do count=$((count+1)); cat F* | ...

Does that make sense to have all F* again for each item?
Instead refer (read from) the current i
Code:
for i in F*; do count=$((count+1)); < $i ...

# 4  
Old 01-12-2014
Not sure what your intention is but if you want to use one file at a time, using a for loop,the problem with you last example seems to be with cat F* instead of cat "$i"
so try something like this:
Code:
for i in F*; do some_script "$i"; done > some_output_file

# 5  
Old 01-13-2014
I am getting the reply "command not found" when I run it like this:

Code:
for f in F*; do scripta "$f";done

But the script still works on individual files. It looks like this:

Code:
gawk '{count[$2]++; keyword[$2] = $1}
END {
for (k in count)
{if (count[k] == 2) keyword[k] = "rearranging"
if (count[k] == 3) keyword[k] = "deleting"
if (count[k] > 3)  print k ": Volumes has more than 3 repeats" > /dev/stderr
else print keyword[k] " " k
}
}'

I tried to debug it with bash -x but all I got was "line1 command not found" I am not sure why it would stop at line 1.
I then found that if I ran it as follows:
Code:
for f in F1; do echo "file is $x"; gawk -f script_0108 $f;done

It gave more information:
Code:
gawk: script_0108:1: gawk '{count[$2]++; keyword[$2] = $1}

Code:
gawk: script_0108:1:      ^ Invalid char ''' in expression

it appears not to like the ' in the script. Any ideas? I will try different quoting

I found it appears to have problems with BEGIN/END blocks/quotes. I ran a script with different content on file F1. It works just fine as long as it is not called as a script. Example:
Code:
for x in F1; do gawk -f test1a $x;done
gawk: test1a:1: awk 'BEGIN{s=0}{s=s+$3}END{print s}'
gawk: test1a:1:     ^ Invalid char ''' in expression

Here is the script. It returns a value of 0 a(which is fine) nd not " invalid" when called without being in a do/for loop:
Code:
cat F1|awk 'BEGIN{s=0}{s=s+$3}END{print s}'
0
{563}$

Then I tried to run it without gawk -f and this time, running it without gawk or awk and just
Code:
for x in F1; do  test1a $x;done

it then returns "command not found"

Last edited by newbie2010; 01-13-2014 at 11:55 AM..
# 6  
Old 01-13-2014
If issues occur when running as script you might suspect something to do with your ENV... e.g. if test1a is an alias it will not run...
# 7  
Old 01-13-2014
The error occurs no matter what I name the script or if it is even a different script with BEGIN/END blocks

Code:
for x in F1; do script_0108 $x;done
bash: script_0108: command not found

This returns "command not found"

Here are two different scripts. They are both named differently and I get "command not found" from both"

at script_0108
Code:
gawk '{count[$2]++; keyword[$2] = $1}
END {
for (k in count)
{if (count[k] == 2) keyword[k] = "rearranging"
if (count[k] == 3) keyword[k] = "deleting"
if (count[k] > 3)  print k ": Volumes has more than 3 repeats" > /dev/stderr
else print keyword[k] " " k
}
}'

and also this one:
Code:
awk 'BEGIN{s=0}{s=s+$3}END{print s}'

I have noticed also that if I run the scripts like this:

Code:
cat F1|test1a
cat F1|script_0108

They give command not found.

If I run them like this:

Code:
cat F1 |./test1a

they return values

So I tried the following:

Code:
for x in F1 F2; do ./test1a $x;done

and the script just hung. There is something wrong with the way I am calling these scripts but I cannot identify it.

Wondering if this is because a counter is being used in the script??

Last edited by Franklin52; 01-13-2014 at 04:12 PM.. Reason: Code tags
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Run script on multiple files

Hi Guys, I've been having a look around to try and understand how i can do the below however havent come across anything that will work. Basically I have a parser script that I need to run across all files in a certain directory, I can do this one my by one on comand line however I... (1 Reply)
Discussion started by: mutley2202
1 Replies

2. Shell Programming and Scripting

Run one script on multiple files and print out multiple files.

How can I Run one script on multiple files and print out multiple files. FOR EXAMPLE i want to run script.pl on 100 files named 1.txt ....100.txt under same directory and print out corresponding file 1.gff ....100.gff.THANKS (4 Replies)
Discussion started by: grace_shen
4 Replies

3. UNIX for Dummies Questions & Answers

Run one script on multiple files and print out multiple files.

How can I run the following command on multiple files and print out the corresponding multiple files. perl script.pl genome.gff 1.txt > 1.gff However, there are multiples files of 1.txt, from 1----100.txt Thank you so much. No duplicate posting! Continue here. (0 Replies)
Discussion started by: grace_shen
0 Replies

4. Shell Programming and Scripting

How to run perl script on multiple files of two directories?

Hi I have 100 files under file A labled 1.txt 2.txt.....100.txt(made up name) I have 1 files under file B labled name.txt How can i run the same perl script on 100 files and file name.txt I want to run perl script.pl A/1.txt B/name.txt perl script.pl A/2.txt B/name.txt ....... perl... (3 Replies)
Discussion started by: grace_shen
3 Replies

5. Shell Programming and Scripting

Bash Scipting (New); Run multiple greps > multiple files

Hi everyone, I'm new to the forums, as you can probably tell... I'm also pretty new to scripting and writing any type of code. I needed to know exactly how I can grep for multiple strings, in files located in one directory, but I need each string to output to a separate file. So I'd... (19 Replies)
Discussion started by: LDHB2012
19 Replies

6. Shell Programming and Scripting

Run perl script on files in multiple directories

Hi, I want to run a Perl script on multiple files, with same name ("Data.txt") but in different directories (eg : 2010_06_09_A/Data.txt, 2010_06_09_B/Data.txt). I know how to run this perl script on files in the same directory like: for $i in *.txt do perl myscript.pl $i > $i.new... (8 Replies)
Discussion started by: ad23
8 Replies

7. Shell Programming and Scripting

How to run multiple awk files

I'm trying some thing like this. But not working It worked for bash files Now I want some thing like that along with multiple input files by redirecting their outputs as inputs of next command like below Could you guyz p0lz help me on this #!/usr/bin/awk -f BEGIN { } script1a.awk... (2 Replies)
Discussion started by: repinementer
2 Replies

8. UNIX for Dummies Questions & Answers

Foreach loop to run a perl script on multiple files

Hi, I have thousands of files in a directory that have the following 2 formats: 289620178.aln 289620179.aln 289620180.aln 289620183.aln 289620184.aln 289620185.aln 289620186.aln 289620187.aln 289620188.aln 289620189.aln 289620190.aln 289620192.aln.... and: alnCDS_1.fasta (1 Reply)
Discussion started by: greptastic
1 Replies

9. Shell Programming and Scripting

1 script or multiple scripts?? - check files, run jobs

Question for anyone that might be able to help: My objective is to eheck if a file (a source file) exists in a directory. If it does then, I'd like to call an application (Informatica ETL file...not necessary to know) to run a program which extracts data and loads it into multiple targets. ... (6 Replies)
Discussion started by: jnanasakti
6 Replies

10. UNIX for Dummies Questions & Answers

when I try to run rm on multiple files I have problem to delete files with space

Hello when I try to run rm on multiple files I have problem to delete files with space. I have this command : find . -name "*.cmd" | xargs \rm -f it doing the work fine but when it comes across files with spaces like : "my foo file.cmd" it refuse to delete it why? (1 Reply)
Discussion started by: umen
1 Replies
Login or Register to Ask a Question