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.
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?
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
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
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:
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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)