Loop through files in a directory


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Loop through files in a directory
# 1  
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  
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  
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  
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  
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 08:18 AM.. Reason: Removed wrong part
This User Gave Thanks to Scrutinizer For This Post:
# 6  
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  
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 for Dates, Times and to Reply

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

Test Your Knowledge in Computers #418
Difficulty: Easy
'JavaScript' is a trademark of Oracle Corporation in the United States.
True or False?

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. Im, 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

Featured Tech Videos