Using input from one file to define scope of other file in Linux


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using input from one file to define scope of other file in Linux
# 15  
Old 03-14-2015
Quote:
Originally Posted by Zooma
You're right of course. The problem was that I used a script editor and got the line ending wrong. Fixed that with:

Code:
sed -i 's/\r//' stats.sh

Ok, the topic has derailed a bit, but here is the final one: if I also add a third column with the URL for each IP in the input file (B.txt), how can I print that in the final table? Tried to add:

name[$1] = $3

Assuming that this would set the variable 'name' for a certain IP address to the URL listed in column 3 in the infile. So if this is a row in the infile:

Code:
62.147.28.224  12  www.myserver.com

The output file would get one more column to the right with www.myserver.com. But it just prints zero (0) for me in that column.

Promise this is the last one in this thread ;-)
It looks like you're saving it appropriately. How are you printing it? Are you using %d or %f format specifier instead of %s to print a string?

Please show us you current script instead of making us guess at what might be wrong.
This User Gave Thanks to Don Cragun For This Post:
# 16  
Old 03-14-2015
Right again Don. Tried to print it as a decimal number but now it's fixed. I'm gonna download awk/bash tutorials and spend next week reading! Anyway, thanks a lot for all help. Posting the final script below where I also added ping counts and the URL.

I guess an infile with 10 000 rows containing 10 addresses in total would write URLs the name[$1] array 10 000 times. Could be done with a separate awk command for the URL only but this is good enough for me.

Now the infile syntax is:

Code:
<IP Address to ping> <ping time> <URL>

And the code that produces the stats:

Code:
awk '
{       if(!($1 in c)) m[$1] = M[$1] = $2
        else    if($2 > M[$1]) M[$1] = $2
        else    if($2 < m[$1]) m[$1] = $2
        s[$1] += $2
        name[$1] = $3
        c[$1]++
}

END {   printf("%-17s %3s %-5s %3s %3s %5s %5s\n", "   IP Address", "Min", " Ave",
                "Max", "PDV", "count", "URL")
        printf("%17s %3s %5s %3s %3s %5s %5s\n", "=================", "===", "=====",
                "===", "===", "=====", "===")
        for(i in c)
                printf("%-17s %3d %5.1f %3d %3d %5d %5s\n", i, m[i], s[i] / c[i], M[i],
                        M[i] - m[i], c[i], name[i])
}' $1

Thanks a lot Don. Appreciated!
# 17  
Old 03-14-2015
If you have big input files, this might run a tiny bit faster (since it only saves the URL once per IP address) and might be a little bit prettier (lining up URL headings with the output assuming an 80 column output device and variable length URLs). It will also allow you to call your script with multiple input files and get a single report for the combined contents of all files you pass in...
Code:
awk '
{	if(!($1 in c)) {
		m[$1] = M[$1] = $2
		name[$1] = $3
	}
	else	if($2 > M[$1]) M[$1] = $2
	else	if($2 < m[$1]) m[$1] = $2
	s[$1] += $2
	c[$1]++
}
END {	printf("%-17s %3s %-5s %3s %3s %5s %s\n", "   IP Address", "Min",
		" Ave", "Max", "PDV", "count", "URL")
	printf("%17s %3s %5s %3s %3s %5s %s\n", "=================", "===",
		"=====", "===", "===", "=====",
		"=====================================")
	for(i in c)
		printf("%-17s %3d %5.1f %3d %3d %5d %s\n", i, m[i], s[i] / c[i],
			M[i], M[i] - m[i], c[i], name[i])
}' "$@"

This User Gave Thanks to Don Cragun For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Bash Variable scope - while loop while reading from a file

Cope sample1: test.sh i=0 echo " Outside loop i = $i " while do i=$(( $i + 1)) echo "Inside loop i = $i " done echo " Out of loop i is : $i " When run output : Outside loop i = 0 Inside loop i = 1 Inside loop i = 2 Inside loop i = 3 Inside loop i = 4 Inside loop i = 5 Inside... (8 Replies)
Discussion started by: Adarshreddy01
8 Replies

2. Shell Programming and Scripting

How to define a variable in a BASH script by using a JSON file online?

Hello, I would like to modify an existing script of mine that uses a manually defined "MCVERSION" variable and make it define that variable instead based on this JSON file stored online: https://s3.amazonaws.com/Minecraft.Download/versions/versions.json Within that JSON, I 'm looking for... (4 Replies)
Discussion started by: nbsparks
4 Replies

3. UNIX for Advanced & Expert Users

Passwd file define user with special character

Hi all , The FTP user defind in my passwd file has ! in the hash password field and i want to know way is that its usually either MD5(Unix) hash or * can anyone explain to me i'm new for unix and want to learn this how my passwd file looks : ... (2 Replies)
Discussion started by: dahash11
2 Replies

4. Shell Programming and Scripting

Define variable from file.

HI I have file A.txt _1A _2A _3A _4A I want define all as different variable. $1A=_1A $2B=_2A $3C=_3A $4D=_4A Now i can use any variable in my script. (3 Replies)
Discussion started by: pareshkp
3 Replies

5. Shell Programming and Scripting

The scope of the shell/perl script is to read the input text file. Validate the expiry date of each

The scope of the shell/perl script is to read the input text file. Validate the expiry date of each certificate and send the mail to the user. The user takes action to add the new certificate to the storage file and user owns the responsibility to update the input text file with the new certificate... (5 Replies)
Discussion started by: casmo
5 Replies

6. UNIX for Dummies Questions & Answers

How to define input files more than 9

awk -v nfiles="10" { ......................... ............ }' $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 up to9 inputs script is running fine but after that it is throwing error file not found though there is a file. I used {$10} but no use. (1 Reply)
Discussion started by: quincyjones
1 Replies

7. Shell Programming and Scripting

Need script to take input from file, match on it in file 2 and input data

All, I am trying to figure out a script to run in windows that will allow me to match on First column in file1 to 8th Column in File2 then Insert file1 column2 to file2 column4 then create a new file. File1: 12345 Sam 12346 Bob 12347 Bill File2:... (1 Reply)
Discussion started by: darkoth
1 Replies

8. Programming

which head file define '_IO_*'

Under Solaris 10,I compile following file, #include <sys/types.h> #include <sys/stat.h> #include <sys/termios.h> #include <sys/ioctl.h> #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <string.h> #include <unistd.h> #include <signal.h> #define _IO_UNBUFFERED __SNBF... (1 Reply)
Discussion started by: konvalo
1 Replies

9. Shell Programming and Scripting

Problem in define cpu in Rules file

i try to install solaris OS in M4000 using OK prompts by boot net . in my rules file i define the cpus like below probe cpus probe networks networks 2 && cpus 8-10 && disksize c0t0d0 100000-292000 && disksize c0t1d0 100000-292000 && memsize 16384 && model SUNW,SPARC-Enterprise... (0 Replies)
Discussion started by: neruppu
0 Replies

10. Solaris

define .rhost file for tape backup to remote host

howdy experts, i am using 2 server- Solaris 5.9 i have tape device attached with 1 of my solaris server. But others not. # modinfo|grep tape 152 13d43e4 1333c 33 1 st (SCSI tape Driver 1.231) now i want to Backup DATA file and System File in Tape Drive. How do I take data and... (3 Replies)
Discussion started by: thepurple
3 Replies
Login or Register to Ask a Question