Loop through files in a directory


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Loop through files in a directory
# 1  
Old 05-23-2014
Loop through files in a directory

Hello

How do I loop through files in a specific directory ?

This script is not working!

Code:
#! /bin/bash
FILES=/usr/desktop/input/*
For f in $FILES;
do
awk '-v A="$a" -v B="$b" {$6=($1-64)/2 ;$7=((10^($6/10))/A)^(1/B) ; print}' OFS="\t" $f > /root/Desktop/output/$f.txt;
done

Orginal txt file:

Code:
$1      $2            $3             $4
74   3.99166 101.37082  2.000
74   3.99166 101.37834  2.000
75   3.98416 101.37082  2.000
75   3.98416 101.37834  2.000
81   3.96916 101.29571  2.000
  0   3.96166 101.28820  2.000
 82   3.96166 101.29571  2.000
 85   3.96167 101.31073  2.000


Expected result:

Code:
$1         $2             $3                $4                  $5        $6
74	3.99166	101.37082	2.000		5	0.0748783
74	3.99166	101.37834	2.000		5	0.0748783
75	3.98416	101.37082	2.000		5.5	0.0804649
75	3.98416	101.37834	2.000		5.5	0.0804649
81	3.96916	101.29571	2.000		8.5	0.12391
0	3.96166	101.28820	2.000		-32	0.000364633
82	3.96166	101.29571	2.000		9	0.133155
85	3.96167	101.31073	2.000		10.5	0.165237

Thanks in advance
# 2  
Old 05-23-2014
There are no upper case letters in bash keywords.

Second, your awk command line options are improperly quoted so that they and the awk script form a single token behind a leading dash.

Did running this code not generate errors? If so, always share those. They save everyone time and effort.

Regards,
Alister
# 3  
Old 05-23-2014
Quote:
Originally Posted by alister
There are no upper case letters in bash keywords.

Second, your awk command line options are improperly quoted so that they and the awk script form a single token behind a leading dash.

Did running this code not generate errors? If so, always share those. They save everyone time and effort.

Regards,
Alister

Hi
First of all thanks for your response.

-I changed uppercase letter to lowercase, but not working again!
-I already run awk script lonely, its ok.
-The cod is not working, because it can not find input directory.
# 4  
Old 05-23-2014
make sure that files exists using this

Code:
$ for f in $FILES; do echo $f; done

and where did you define variable a and b ?
This User Gave Thanks to Akshay Hegde For This Post:
# 5  
Old 05-23-2014
In addition, note that:
Code:
FILES=/usr/desktop/input/*
For f in $FILES;

is not the same as:
Code:
for f in /usr/desktop/input/*

Obviously For should be for (lowercase) like alister notes, but also, the content of the unquoted variable expansion $FILES is subject to field splitting (default: space, TAB or newline), which may lead to erroneous results and which will not occur with the second form...

Last edited by Scrutinizer; 05-24-2014 at 07:18 AM.. Reason: Removed wrong part
This User Gave Thanks to Scrutinizer For This Post:
# 6  
Old 05-24-2014
Quote:
Originally Posted by Scrutinizer
In addition, note that:
Code:
FILES=/usr/desktop/input/*
For f in $FILES;

is not the same as:
Code:
for f in /usr/desktop/input/*

Obviously For should be for (lowercase) like alister notes, but also, the content of the unquoted variable expansion $FILES is subject to field splitting (default: space, TAB or newline), which may lead to erroneous results and which will not occur with the second form...

Regarding the awk statement, it overwrites the content of /root/Desktop/output/$f.txt with every iteration of the loop.
Try
Code:
for ...
do
  ...
done > "/root/Desktop/output/$f.txt"

And like noted before in most cases variable expansions should be quoted, "$f" rather than $f
Hi friend
Thanks for your consideration.

when I run the code without copy the results, it is ok.

Code:
#! /bin/bash
FILES=/root/Desktop/decoder/input/*
for f in $FILES
do
awk '{$6=($1-64)/2 ;$7=((10^($6/10))/250)^(1/1.2) ; print}' OFS="\t" "$f";
done

But when I wanna save the results in separate txt files, it is not working.

Code:
#! /bin/bash
FILES=/root/Desktop/decoder/input/*
for f in $FILES
do
awk '{$6=($1-64)/2 ;$7=((10^($6/10))/250)^(1/1.2) ; print}' OFS="\t" "$f" > "/root/Desktop/decoder/input/out/"$f".txt "
done

I got this error:

Code:
[root@localhost decoder]# t1
./t1: line 6: /root/Desktop/decoder/input/out//root/Desktop/decoder/input/out.txt: No such file or directory
./t1: line 6: /root/Desktop/decoder/input/out//root/Desktop/decoder/input/SG1140103020247.CAP98RE.txt: No such file or directory
[root@localhost decoder]#

Furthermore, I tried to put output directory after done , but it is also not working.

I have a lot of files in Input and I want to have the results of all the files in separate folder.

Thanks in advance.
# 7  
Old 05-24-2014
If you are going to specify the path to the target directory in your redirection, then you need to strip directories from $f and only use the basename.

Regards,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to exclude some files from the loop on the directory?

I have one question. On the directory I have many files start with DB.DAILYxxxxxxx.YYYYMMDD.HHMMSS and I have several files with other format, like LET.20170310 daily.20170310 tba.20170310 How can I exclude from my loop DB.DAILY files? I tried ls *20170310* | while read... (4 Replies)
Discussion started by: digioleg54
4 Replies

2. Shell Programming and Scripting

Loop through files in directory

I am trying to loop through files in a directory, and sort each file. No matter what changes I make to the code, I get the following errors: 'aunch.sh: line 4: syntax error near unexpected token `do 'aunch.sh: line 4: `for f in ${FILES}/*; do #!/bin/bash FILES=$(pwd) for f in ${FILES}/*;... (6 Replies)
Discussion started by: ldorsey
6 Replies

3. Shell Programming and Scripting

Loop through files in directory

I am trying to loop through files in a directory, and sort each file. No matter what changes I make to the code, I get the following errors: 'aunch.sh: line 4: syntax error near unexpected token `do 'aunch.sh: line 4: `for f in ${FILES}/*; do #!/bin/bash FILES=$(pwd) for f in ${FILES}/*;... (1 Reply)
Discussion started by: ldorsey
1 Replies

4. UNIX for Dummies Questions & Answers

[Solved] Writing a loop to changing the names of files in a directory

Hi, I would like to write a loop to change the names of files in a directory. The files are called data1.txt through data1000.txt. I'd like to change their names to a1.txt through a1000.txt. How do I go about doing that? Thanks! (2 Replies)
Discussion started by: evelibertine
2 Replies

5. UNIX Desktop Questions & Answers

Copy all files in 1 directory to another usinge for-in loop

I was looking to get some help with copying files in one directory to another using a for-in loop. My script file is called copyfile and here is what I have: for file in $(ls -a $1) do cp $file ~/dir-2 done When I run copyfile dir-1 this is what I get cp: omitting directory `.'... (1 Reply)
Discussion started by: Trinimini
1 Replies

6. Shell Programming and Scripting

Find the latest directory and loop through the files and pick the error messages

Hi, I am new to unix and shell scripting,can anybody help me in sctipting a requirement. my requirement is to get the latest directory the name of the directory will be like CSB.monthdate_time stamp like CSB.Sep29_11:16 and CSB.Oct01_16:21. i need to pick the latest directory. in the... (15 Replies)
Discussion started by: sudhir_83k
15 Replies

7. Shell Programming and Scripting

loop through files in directory

hi all i have some files present in a directory i want to loop through all the files in the directory each time i loop i should change the in_file parameter in the control file and load it into a table using sql loader there is only one table where i have to load alll the files ... (3 Replies)
Discussion started by: rajesh_tns
3 Replies

8. Shell Programming and Scripting

Loop certain code to all files within directory

Hi all, Can somebody help me with this problem pls. I need to extract one specific line from each files in a folder and put the all lines extracted in a unique output file in the following format. line extracted, respective name of file, date of file. I´m, trying the part to extract... (3 Replies)
Discussion started by: cgkmal
3 Replies

9. AIX

loop through the directory for files and sort by date and process the first file

hello i have a requirement where i have a direcotry in which i get files in the format STOCKS.20080114.dat STOCKS.20080115.dat STOCKS.20080117.dat STOCKS.20080118.dat i need to loop through the directory and sort by create date descending order and i need to process the first file. ... (1 Reply)
Discussion started by: dsdev_123
1 Replies

10. Shell Programming and Scripting

Loop through files in a directory

Hi, I want to write bash script that will keep on looking for files in a directory and if any file exists, it processes them. I want it to be a background process, which keeps looking for files in a directory. Is there any way to do that in bash script? I can loop through all the files like... (4 Replies)
Discussion started by: rladda
4 Replies
Login or Register to Ask a Question