Comparing two .txt files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Comparing two .txt files
# 8  
Old 09-06-2012
Quote:
Originally Posted by draghun9
I am a newbie and heard from someone that using awk command doesn't workout right sometimes when we have while and for loops...but for me as of now it works fine without any problem...Smilie
Awk doesn't mysteriously stop working inside while loops, no.

I can only guess what your friend meant, but I'm assuming the lesson intended was "Don't run awk 30,000 times to process 10,000 lines". And that is certainly correct, not to mention an error I see new shell programmers making a lot. They see awk used to get a column and think "Oh, that's what awk is for", and use it everywhere. Things like ...
Code:
while read LINE
do
        FIRSTCOLUMN=`echo $LINE | awk '{print $1}'`
        SECONDCOLUMN=`echo $LINE | awk '{print $2}'`
        THIRDCOLUMN=`echo $LINE | awk '{print $2}'`
        SOMETHINGELSE=`echo $LINE | sed '...'`
done < inputfile

...are extremely silly. Whenever get asked 'why is my script slow', they're doing that.

Better way to do it would be
Code:
while read FIRSTCOLUMN SECONDCOLUMN THIRDCOLUMN REST
do
...
done < inputfile

so you run awk 0 times instead of 30,000, and sed 0 times instead of 10,000...

But I'm using awk to process entire files. Nothing silly about that.

Last edited by Corona688; 09-06-2012 at 02:50 PM..
These 2 Users Gave Thanks to Corona688 For This Post:
# 9  
Old 09-07-2012
Nice Corona688, what you said makes sense especially if you are processing large files. How about if there are many columns like says 10 columns, what is the efficient way of doing that instead of declaring 10 variables?
# 10  
Old 09-07-2012
Supposing the columns are separated by , there's a few things you can do.

I like the set -- feature a lot, it's a simple thing which exists in any Bourne shell, capable of replacing arrays for many purposes and actually simpler to use.
This should work in any shell:
Code:
OLDIFS="$IFS"
IFS=","

while read LINE
do
        # Set the $1, $2, ... variables to the values of columns.
        set -- $LINE
done < inputfile

IFS="$OLDIFS"

You can also use IFS="," read -a arrayname to read elements into an array if you have BASH.

If your columns are separated by ordinary whitespace, leave off the IFS="" part of course.

Last edited by Corona688; 09-07-2012 at 12:27 PM..
This User Gave Thanks to Corona688 For This Post:
# 11  
Old 09-07-2012
Assuming nothing more than that the data is a valid text file, while the following traps may not trigger often, I think it's a good idea to mention them for the benefit of novices considering adding these techniques to their repertoire.

Quote:
Originally Posted by Corona688
I like the set -- feature a lot, it's a simple thing which exists in any Bourne shell, capable of replacing arrays for many purposes and actually simpler to use.
Anything that looks like a shell filename pattern (and the possibilities of encountering one increase with increasing shell capability) could modify the data. I would suggest protecting against the worst by using set to toggle globbing.


Quote:
Originally Posted by Corona688
You can also use IFS="," read -a arrayname to read elements into an array if you have BASH.
Whether reading into an array or a string variable, without -r, backslashes and newlines in the data will be lost and a valid text file could be rendered invalid (if its concluding newline is consumed by read).

Regards,
Alister
These 3 Users Gave Thanks to alister For This Post:
# 12  
Old 09-11-2012
@mjf... i have quick question i kept the command u send me in a function i want it to return a value....
Code:
 
comm -23 file1.txt defaultfile.txt | xargs -Ifn echo fn "not authenticated" | RCODE = 5

name5 not authenticated

and then do return $RCODE and will use this RCODE in another if statement. ....my doubt is that can i do this change and will it work...


Thanks again for your reply
# 13  
Old 09-12-2012
draghun9,
How you have coded the RCODE above will not work (try it). If you want to code this into a function, then why try to do in all one command line? Use an If/else condition to echo the return code based on results of each compare.
This User Gave Thanks to mjf For This Post:
# 14  
Old 09-12-2012
@MJF...
Yeah, i tried and returncode doesnt work....and the thing is even if one line is not authenticated, it should return the value with rcode=5.... as i said i am new to the scripting i am really struck at this part (no clue abt how to proceed with if/else for this requirementSmilie)...please help.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Comparing two files and list the difference with common first line content of both files

I have two file as given below which shows the ACL permissions of each file. I need to compare the source file with target file and list down the difference as specified below in required output. Can someone help me on this ? Source File ************* # file: /local/test_1 # owner: own #... (4 Replies)
Discussion started by: sarathy_a35
4 Replies

2. Shell Programming and Scripting

Compare two txt files,mismatches will be in new txt files

Hi, Below are the sample data for txt files. txt file 1 Partnumber|catgroup_id 10001082|46016 10001093|4680 10001093|386003 10001093|463004 10003251|683 10003251|63005 10003252|463005 10003252|4683 10003260|463005 10003260|4683 10003264|4683 10003264|463005 13420000|67... (5 Replies)
Discussion started by: Ankita Talukdar
5 Replies

3. UNIX for Advanced & Expert Users

How to find duplicates contents in a files by comparing other files?

Hi Guys , we have one directory ...in that directory all files will be set on each day.. files must have header ,contents ,footer.. i wants to compare the header,contents,footer ..if its same means display an error message as 'files contents same' (7 Replies)
Discussion started by: Venkatesh1
7 Replies

4. UNIX for Dummies Questions & Answers

Comparing two txt files with AWK

Hi, I need to compare two text files with awk. File1: ------- chr1 43815007 43815009 COSM19193 REF=TG;OBS=AA;ANCHOR=G AMPL495041 chr1 43815008 43815009 COSM18918 REF=G;OBS=T;ANCHOR=T AMPL495041 chr1 115256527 115256528 ... (6 Replies)
Discussion started by: RushiK
6 Replies

5. Shell Programming and Scripting

Comparing the matches in two files using awk when both files have their own field separators

I've two files with data like below: file1.txt: AAA,Apples,123 BBB,Bananas,124 CCC,Carrot,125 file2.txt: Store1|AAA|123|11 Store2|BBB|124|23 Store3|CCC|125|57 Store4|DDD|126|38 So,the field separator in file1.txt is a comma and in file2.txt,it is | Now,the output should be... (2 Replies)
Discussion started by: asyed
2 Replies

6. Shell Programming and Scripting

Comparing Strings in 2 .csv/txt files?

EDIT: My problems have been solved thanks to the help of bartus11 and pravin27 This code is just to help me learn. It serves no purpose other than that. Here's a sample csv that I'm working with - #listofpeeps.csv Jackie Chan,1954,M Chuck Norris,1930,M Bruce Lee,1940,M This code is... (13 Replies)
Discussion started by: chickeneaterguy
13 Replies

7. Solaris

list files .txt and .TXT in one command

Dear experts, In a directory i have both *.TXT and *.txt files. I have a script- for file in `ls *.txt`; do mv $file /tmp/$file How to list both *.txt and*.TXT file in one command so that script will move both .txt or .TXT whatever it find. br//purple (4 Replies)
Discussion started by: thepurple
4 Replies

8. Shell Programming and Scripting

Comparing two .txt files in shell scripting...

Hi, I have two big .txt files.and i need to compare those two files and redirect it into some other file. If any body wants to resolve this issue then i can send the two text files. Need some quick responce. Thanks, prakash (10 Replies)
Discussion started by: prakash123
10 Replies

9. UNIX for Dummies Questions & Answers

echo "ABC" > file1.txt file2.txt file3.txt

Hi Guru's, I need to create 3 files with the contents "ABC" using single command. Iam using: echo "ABC" > file1.txt file2.txt file3.txt the above command is not working. pls help me... With Regards / Ganapati (4 Replies)
Discussion started by: ganapati
4 Replies

10. Shell Programming and Scripting

Comparing two txt files - pls help

Hi, I have some text files. I need a separate shell say 1.sh in which i can open a particular text file and compare with another txt file. For example: 1.log.txt contains apple ball cat goat 2.log.txt contains goat cat lion apple fox In my i.sh i need to write script to... (5 Replies)
Discussion started by: jisha
5 Replies
Login or Register to Ask a Question