Dealing with Empty files, AWK and Loops


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Dealing with Empty files, AWK and Loops
# 15  
Old 06-06-2012
Quote:
Originally Posted by A-V
i have this which works but I want to see how to make it look like the one that you wrote nicely
Smilie

You've done it in such a roundabout way it's difficult to tell what you did.

Every time I ask, you only tell me a tiny piece of what you want, never the whole, and refuse to show your work.

At least you've given me your input data now, so I can try and reverse engineer it...
# 16  
Old 06-06-2012
Your program, for me, produces results of

Code:
count/file1,1.5 ,0.25
count/file2,0 ,1
count/file3,NA, NA

...which doesn't seem correct.
# 17  
Old 06-06-2012
sorry ... Smilie

i am new and trying to learn and I can only code with things that I have seen around
i know sometimes they are haphazard

---------- Post updated at 12:24 PM ---------- Previous update was at 12:23 PM ----------

yap thats right

that the mean and variance of the number of words (that were in a line) for each file in a folder
# 18  
Old 06-06-2012
What I'm trying to tell you is that I don't care what your program is. If your program isn't doing exactly you want -- and it certainly doesn't completely work here -- then it's not relevant, doesn't help, can't help.

What I want to know is what you do want it to do -- i.e. the input you have, the ouput you want, and the calculations you'd do if you were doing it by hand.

My program appears to work with the data you gave.

Code:
$ tail -n 100 data/*
==> data/file1 <==
this is me
this is me again

==> data/file2 <==
hello hello hello
hello

==> data/file3 <==
2 3 5
73 543 567 56788

$ cat meanvar.awk

# Output separator is ,
BEGIN { OFS="," }

# Whenever the filename changes, print results and start over
F != FILENAME {
        if(n>0)
        {
                mean=s/n;
                for(i in x)
                {
                        ss += (x[i]-mean)^2;
                        delete x[i];
                }
                var=(ss/n);

                print F, mean, var;
        }

        ss=0;   s=0;    n=0;    F=FILENAME
}

# First line of every file, grab the number of columns
FNR==1 { COLS=NF }

{
        x[++n]=NF;
        s+=NF;
}

# Also a special case for when the last file ends.
END {
        if(n>0)
        {
                mean=s/n;
                for(i in x)
                {
                        ss += (x[i]-mean)^2;
                        delete x[i];
                }
                var=(ss/n);

                print F, mean, var;
        }
}

$ awk -f meanvar.awk data/*
data/file1,3.5,0.25
data/file2,2,1
data/file3,3.5,0.25

$

If it's wrong, please explain what it should have done.
This User Gave Thanks to Corona688 For This Post:
# 19  
Old 06-06-2012
this is great

it will only not print the names of the files that are empty
for example if we have file one all empty i would imagine it should write something line

Quote:
data/file4, NA, NA
or
Quote:
data/file4, 0, 0
i have tied to add
Code:
else 
	{
		print F, NA, NA;
	}

and even
Code:
else if (n=0) 
	{
		print F, NA, NA;
	}

but it dont seem to count it
# 20  
Old 06-06-2012
It cannot print the names of empty files. Empty files have no lines, so no code is ever run for them. You can easily check those yourself after:

Code:
awk ... > output

for FILE in data/*
do
        [ -s "$FILE" ] || echo "$FILE,0,0"
done >> output

This User Gave Thanks to Corona688 For This Post:
# 21  
Old 06-06-2012
Thank you very much for your help and your time

I have learned a lot and sorry if I wasn't clear enough as I dont know what needs to happen sometimes either.

this type of coding seems very professional and easy to read so I hope I will be able to write my own next time.
and it is quite interesting how it deals with empty files


thanks again for all the help
A-V
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Check file from multiple files is empty using awk

I am passing multiple files in awk & since one of the file is empty(say file3) so the same gets skipped & logic goes for toss. Need suggestion/help in checking and putting additional checks for the same awk -F, 'FNR==1 {++filecounter} filecounter==1 {KRL=$2;next} filecounter==2... (8 Replies)
Discussion started by: siramitsharma
8 Replies

2. Shell Programming and Scripting

Awk: Dealing with whitespace in associative array indicies

Is there a reliable way to deal with whitespace in array indicies? I am trying to annotate fails in a database using a table of known fails. In a begin block I have code like this: # Read in Known Fail List getline < "'"$failListFile"'"; getline < "'"$failListFile"'"; getline <... (6 Replies)
Discussion started by: Michael Stora
6 Replies

3. Shell Programming and Scripting

Dealing with multiple files

Korn Shell I have hundreds of small files like below created every day. A midnight cron job moves them to the location /u04/temp/logs But sometimes I have to manually move these files based a certain dates or time. I have two basic requirements 1.Using mv command I want to move all .dat... (2 Replies)
Discussion started by: kraljic
2 Replies

4. UNIX for Dummies Questions & Answers

Dealing with Double Loops, Arrays and GREP

Can someone please help me to learn how to deal with loops, arrays and grep? I have two arrays (lets say I and j) each in a separate file And have file with lines of data I need to extract, such as Ruby Smith: some text here Ruby Smith: some other text here Ruby Brown: some text here Ruby... (10 Replies)
Discussion started by: A-V
10 Replies

5. UNIX Desktop Questions & Answers

awk using 2 input files instead of while loops

Hi Friends, I have two files as input with data that looks like this: file1.txt 1 2 3 4 file2.txt a,aa b,bb c,cc d,dd e,ee f,ff instead of me doing 2 while loops to get the combinations while read line_file1 (2 Replies)
Discussion started by: kokoro
2 Replies

6. Shell Programming and Scripting

Iterating over subdirectories and dealing with files within them

Hello, I am working on a coding project for a class and to test the program I have created, I have come up with 100 different test cases. The program takes four text files as input, so each of the test cases is contained in a folder with four files. I have a folder called 'tests', within which... (1 Reply)
Discussion started by: dpryor
1 Replies

7. Shell Programming and Scripting

Dealing with files with spaces in the name

Hello, I'm a computer science major and I'm having problems dealing with file names with spaces in them. Particularly I'm saving a file name in a variable and then using the variable in a compare function i.e. a='te xt.txt' b='file2.txt' cmp $a $b If anyone could help me with this particular... (10 Replies)
Discussion started by: jakethegreycat
10 Replies

8. Shell Programming and Scripting

Dealing with log files

Hi , My requirement is that i need to search for a number of strings in a log file and print them with line numbers.The search should be date wise. The sample log file is : Jan 17 02:45:34 srim6165 MQSIv500: (UKBRKR1P_B.LZ_ BENCHMARKS)BIP2648E: Message backed out to a queue; node... (6 Replies)
Discussion started by: charudpss
6 Replies

9. Shell Programming and Scripting

perl: When dealing with files that do not exist

I have a process run weekly where I must convert data formats for about thirty files. I read a text file that provides all of the filenames and switch settings. My perl code is: for ($j = 1; $j <= $k; $j++) { open(FIN2,$fin2) || die "open: $!"; do other stuff } Every once in... (2 Replies)
Discussion started by: joeyg
2 Replies

10. Shell Programming and Scripting

While loops and awk

I am trying to make a script that will replace backslashes in a file, but only if the occurance is a pathname. In the file, there are a lot of regular expressions as well, so I'm trying to preserve the integrity of those regular expressions, but convert Windows relative paths. I'm using bash and... (1 Reply)
Discussion started by: Loriel
1 Replies
Login or Register to Ask a Question