Sponsored Content
Full Discussion: Comparing two files
Top Forums Shell Programming and Scripting Comparing two files Post 302204218 by era on Wednesday 11th of June 2008 02:46:38 AM
Old 06-11-2008
Like I wrote already, you would run the latest script in addition to the earlier one. If you want to integrate them into your processing, here is a combined script which does all of the above.

Code:
perl -0777 -pi~ -e 's/ *\r?\n *([-~\d])/ $1/g; 
    s/:\s*(\d+)?\s*(~|$)/: $1 $2/mg; s/  */ /g;' file1.txt file2.txt

The -i option causes the original file to be replaced, and the ~ argument to -i causes a backup of the original to me moved to the same file name (including path) with a tilde appended to the original name. If you don't want a backup, leave out the tilde argument.

The -0777 option causes the whole file to be read as a single "line", so that we can do substitutions straddling newline boundaries easily.

The regular expression substitutions do the following:

s/ *\r?\n *([-~\d])/ $1/g replaces a newline \n and any adjacent spaces with a single space if followed by dash, tilde, or a number [-~\d]. This takes care of wrapping. The \r? allows for an optional DOS carriage return before the newline.

s/:\s*(\d+)?\s*(~|$)/: $1 $2/mg normalizes spacing patterns for field values. A colon followed by a number \d+ followed by a tilde or end of line $ with arbitrary runs of spaces between them (including none) are replaced with exactly one space between the colon, the number, and the tilde. The question mark after (\d+) makes the number optional, which should take care of simply colon followed by tilde as well.

s/ */ /g replaces runs of two or more spaces with a single space.

The /g option causes each substitution to be performed globally (without it, only the first occurrence will be substituted). The /m option causes the regular expression $ to match a newline anywhere in a multi-line string, as well as the end of the string.

Generally, in s/any (stuff)/$1, the value of $1 on the right-hand side will be whatever matched the first set of parentheses on the left-hand side. In the case of nested parentheses, they are numbered sequentially from the left by the opening parentheses, so in s/(foo(bar)(baz))/$1 $2 $3/ you would have "foobarbaz" in $1 and "bar" in $2 and "baz" in $3 (and so the result of the whole substitution would be to replace "foobarbaz" with "foobarbaz bar baz").

Last edited by era; 06-11-2008 at 03:52 AM.. Reason: Explain $1 in s/(stuff)/$1/
 

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

comparing shadow files with real files

Hi I need to compare shadow file sizes with their real file counterparts. If the shadow file size differs form the realfile size then it must send a mail. My problem is that our system has over 1600 shadowfiles in different directories, with different names. the only consistancy is the .sh file... (4 Replies)
Discussion started by: terrym
4 Replies

2. Shell Programming and Scripting

Comparing files

I have a file called X, which contains the following: 10 100 200 300 I then have file Y, which containts the following: 10 200 500 800 I want to write a script that will compare the contents of Y with the contents of X and ONLY return values in Y that does not exist in X (output... (5 Replies)
Discussion started by: soliberus
5 Replies

3. Shell Programming and Scripting

Need Help Comparing two Files

I really need help on creating a script that does the following: I have one file (File 1) with lines in the following format: Name.maf score1 score2 I have a second file (File 2) with lines in the following format: label start end Name What I need to do is compare File 1 and... (1 Reply)
Discussion started by: awknerd
1 Replies

4. Shell Programming and Scripting

Need help comparing two files and deleting some things in those files!

So I have two files: File1 pictures.txt 1.1 1.3 dance.txt 1.2 1.4 treehouse.txt 1.3 1.5 File2 pictures.txt 1.5 ref2313 1.4 ref2345 1.3 ref5432 1.2 ref4244 dance.txt 1.6 ref2342 1.5 ref2352 1.4 ref0695 1.3 ref5738 1.2 ref4948 1.1 treehouse.txt 1.6 ref8573 1.5 ref3284 1.4 ref5838... (24 Replies)
Discussion started by: linuxkid
24 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. 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

7. Shell Programming and Scripting

Help with comparing two files

Hi all I have to compare two file this time one is P11223 x1124 x1145 t5678 e3456 z2345 another file P11223 x s (2 Replies)
Discussion started by: manigrover
2 Replies

8. Shell Programming and Scripting

Comparing the files

Hi Friends, I have file1.txt file2.txt I tried using the diff and comm but not getting the expected output.. I want where exactly the miss match occurs. probably the field. Sourcevalue|Targetvalue|Linenumber|field 29123975|2923975|3|1 Please help. (6 Replies)
Discussion started by: i150371485
6 Replies

9. Shell Programming and Scripting

Comparing files in a directory against an array of files

I hope I can explain this correctly. I am using Bash-4.2 for my shell. I have a group of file names held in an array. I want to compare the names in this array against the names of files currently present in a directory. If the file does not exist in the directory, that is not a problem.... (5 Replies)
Discussion started by: BudMan
5 Replies

10. 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
XZDIFF(1)							     XZ Utils								 XZDIFF(1)

NAME
xzcmp, xzdiff, lzcmp, lzdiff - compare compressed files SYNOPSIS
xzcmp [cmp_options] file1 [file2] xzdiff [diff_options] file1 [file2] lzcmp [cmp_options] file1 [file2] lzdiff [diff_options] file1 [file2] DESCRIPTION
xzcmp and xzdiff invoke cmp(1) or diff(1) on files compressed with xz(1), lzma(1), gzip(1), or bzip2(1). All options specified are passed directly to cmp(1) or diff(1). If only one file is specified, then the files compared are file1 (which must have a suffix of a supported compression format) and file1 from which the compression format suffix has been stripped. If two files are specified, then they are uncom- pressed if necessary and fed to cmp(1) or diff(1). The exit status from cmp(1) or diff(1) is preserved. The names lzcmp and lzdiff are provided for backward compatibility with LZMA Utils. SEE ALSO
cmp(1), diff(1), xz(1), gzip(1), bzip2(1), zdiff(1) BUGS
Messages from the cmp(1) or diff(1) programs refer to temporary filenames instead of those specified. Tukaani 2010-09-27 XZDIFF(1)
All times are GMT -4. The time now is 10:16 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy