Subtracting two files


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Answers to Frequently Asked Questions Subtracting two files
# 1  
Old 08-11-2016
Subtracting two files

Hi,

I want to subtract 2 files and save the remaining text in another file. Lets say,


Code:
Hello
Happy  //
Hi
*
Hungry

File2

Code:
Happy
Hi


Output

Code:
Hello
 //
*
Hungry

I do not want to remove the whole line. Just need the exact subtraction. When I used grep -vf file2 file1 It removes whole line. How to get the exact subtraction? Thanks

Last edited by Don Cragun; 08-11-2016 at 11:15 PM.. Reason: Add CODE AND ICODE tags.
# 2  
Old 08-11-2016
What operating system and shell are you using?

What have you tried to solve this problem on your own?
# 3  
Old 08-11-2016
I'm using opensuse 13.2. Yeah I figured it out using,

Code:
grep -Fvf file2 file1

This removes the exact text needed to be subtracted. By the way can you help me to differentiate between pointers and multiplications of a C cod. I need to eliminate lines, containing pointers from a C code and save the rest to a text file using a shell script

Last edited by zaxxon; 08-12-2016 at 04:38 AM..
# 4  
Old 08-12-2016
how about using sed ?

try with test data, before applying this command to the real data.

here, we are using sed -i

Code:
while read pattern; do sed -i "s/$pattern//g" file1 ; done < file2

# 5  
Old 08-12-2016
Try also
Code:
awk 'FNR == NR {T[$1]; next} {for (t in T) sub (t, _)} 1' file2 file1
Hello
  //

*
Hungry

This User Gave Thanks to RudiC For This Post:
# 6  
Old 08-12-2016
Hi beginner_99,
Note that the command:
Code:
grep -Fvf file2 file1

doesn't just remove the strings found in file2 from file1; it removes every line from file1 that contains any string found in file2.

And, assuming that the strings contained in file2 only consist of characters that are not "special" in a regular expression (RE), the code suggested by itkamaraj will not only remove the strings Happy and Hi from file1, it will also remove the string HHappyi (by removing Happy in the 1st invocation of sed and by removing the remaining Hi in the 2nd invocation of sed after removing Happy from HHappyi in the 1st invocation of sed).

The awk script suggested by RudiC will not only remove the strings Happy and Hi, but will also either remove the string HHappyi as in itkamaraj's sed script OR the strings HHiappy, HaHippy, HapHipy, and HappHiy depending on which of the two possible random orders awk uses to process the two lines found in file2 (there are 2**(N-1) possible random orders to process the N lines in file2 for the more general case).

If the strings you are processing might contain characters that are "special" in a regex used by awk or sed, you need to use awk instead of sed and use match() instead of sub() to find the matching strings or preprocess the REs in file2 to escape "special" characters.

If you want to remove all remaining matching strings after removing strings on the first pass, you'll need to use awk or sed commands to delete matched strings in a loop until no more matches are found.

Knowing these options, can you tell us if any of these issue matter with the real data you will be processing? And, if so, do you need help in figuring out how to make the needed changes to the suggestions you have received so far?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Changing CSV files with date . Subtracting date by values

Hi All, I have a CSV file which is as below. Basically I need to take the year column in it and find if the year is >= 20152 . If that is then I should subtract all values by 6. In the below example in description I am having number mentioned as YYWW so I need to subtract those by -5. Whereever... (8 Replies)
Discussion started by: arunkumar_mca
8 Replies

2. Shell Programming and Scripting

Subtracting two files by string

Hi, I have file with a list of names like this: dfdsf ddvc dsfgf gfdg dgfdgt gfdgdf I have another file with three columns like this (tab delimited): wwrwe rgdfg sgfd dgfd sdgdg dfg fsss dfgdf sdgfd Now I want the lines whose 2nd column is not similar to any of the strings in the... (1 Reply)
Discussion started by: a_bahreini
1 Replies

3. Shell Programming and Scripting

Subtracting values from variable

Legends, Please help me in , how do i subtract the variable values listed like below. the first value of orig should be subtracted from first value of prev and so on. san> echo $orig 346 316 340 239 410 107 291 139 128 230 167 147 159 159 172 116 110 260 177 0 177 169 168 186 165 366 195... (15 Replies)
Discussion started by: sdosanjh
15 Replies

4. Shell Programming and Scripting

Subtracting columns against each other

Hi All, I have a file of 100 lines of each having 1000 columns. I need to find the difference of each column against each other. That means, Col1-Col1; Col1-Col2; Col1-Col3;......Col1-Col1000; Col2-Col1; Col2-Col2; Col2-Col3;.... and so on ....up to Col1000-Col1000. Lets say the file is... (6 Replies)
Discussion started by: Fredrick
6 Replies

5. Shell Programming and Scripting

Subtracting with awk?

i have a small awk script which prints the 5 columns of different o/p i want the 5th column subtracted from 100 and then display the result .. but i do not get the desired result .. I 'm using following script awk ' BEGIN { FS="" RS="us" } { ... (3 Replies)
Discussion started by: fugitive
3 Replies

6. Shell Programming and Scripting

subtracting variables in ksh

hi all, how do i subract variables in shell ?? am trying to space out the headers and the output generated by the shell so they all line up : currently the output is like this : servers : users server1 : 10 latestServer : 50 so i thought... (3 Replies)
Discussion started by: cesarNZ
3 Replies

7. Shell Programming and Scripting

comparing files - adding/subtracting/formating columns

I have two files: file1.txt: FS Total Used Free Used% /u01 10000 8000 2000 80% /u02 10000 8000 2000 80% /u03 10000 8000 2000 80% /u04 10000 8000 2000 80% /u05 10000 8000 2000 80% /u06 10000 8000 2000 80% /u07 10000 8000 2000 80% /u10 10000 5000 5000 50% file2.txt:... (7 Replies)
Discussion started by: oabdalla
7 Replies

8. UNIX for Dummies Questions & Answers

Subtracting an Integer from a Variable

Hello, I am in following situation.- COUNT=`ls -l | wc -l` echo $COUNT ---> 26 NO_OF_FILES=$COUNT-1 echo $NO_OF_FILES ---> 26-1 Here, I want the output to be 25. How could I do this. It seems simple, but I am not getting it. Please help me. (2 Replies)
Discussion started by: The Observer
2 Replies

9. Shell Programming and Scripting

Subtracting date / timestamps

I have looked through the forums and found many date / time manipulation tools, but cannot seem to find something that fits my needs for the following. I have a log file with date time stamps like this: Jun 21 17:21:52 Jun 21 17:24:56 Jun 21 17:27:59 Jun 21 17:31:03 Jun 21 17:34:07 Jun... (0 Replies)
Discussion started by: roadcyclist
0 Replies

10. UNIX for Dummies Questions & Answers

Subtracting Variables which are commands

I have this idea. I have a variable for the start of someones log in time, (start=`who am i | cut -c30-34`) and a variable for the log out time or present time, (end=`date | cut -c12-16`) but how do I go about subtracting them to get the total log in time. I've tried adding a another variable... (2 Replies)
Discussion started by: Astudent
2 Replies
Login or Register to Ask a Question