Adding new line to file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Adding new line to file
# 8  
Old 05-25-2014
awk is more concise for these forms of filtering.

Code:
awk 'NR==FNR {a[$3]; next} $3 in a' file1 file2 > exist_in_both.file

Code:
awk 'NR==FNR {a[$3]; next} !($3 in a)' file1 file2 > does_not_exist_in_both.file

---------- Post updated at 08:47 PM ---------- Previous update was at 08:28 PM ----------

An untested try using perl, which saves two files:
match.txt and unmatch.txt
run it as:
# search.pl file1 file2

Code:
#!/usr/bin/perl

use strict;
use warnings;

my $first_file = 1;
my %record;

my $hits = "match.txt";
my $misses = "unmatch.txt";

open my $fh1, '>', "$hits" or die "Could not open $hits: !$\n";
open my $fh2, '>', "$misses" or die "Could not open $misses: !$\n";

while(<>) {
    chomp;
    my @fields = split;
    if ( $first_file == 1 ) {
        $record{$fields[2]} = 1;
        next;
    }
    if (exists $record{$fields[2]}) {
        print $fh1 "$_\n";
    } else {
        print $fh2 "$_\n";
    }
}

continue {
    if (eof) {++$first_file};
}

close $fh1;
close $fh2;

# 9  
Old 05-26-2014
Thank you so much for your suggestion, thing's getting much easier now Smilie.
# 10  
Old 05-26-2014
If you want three output files, (variables in file1 only, variables in file2 only, and variables in both files) you could also try:
Code:
awk '
FNR == NR {
	f1[++n1] = $3
	var[$3]
	next
}
{	if($3 in var) {	print $3 > "in_both"
			delete var[$3]
	} else		print $3 > "in_f2_only"
}
END {	for(i = 1; i <= n1; i++)
		if(f1[i] in var)
			print f1[i] > "in_f1_only"
}' file1 file2

This script could be simplified some if you don't care about the order of lines in the output of variable names found only in file1. The way this is currently written variable names in the files in_both and in_f2_only will appear in the order in which they first appeared in file2 and variable names in the file in_f1_only will appear in the order in which they first appeared in file1.

In someone wants to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk, /usr/xpg6/bin/awk, or nawk.
# 11  
Old 05-26-2014
Thank you so much, thing is much easier since Aia and you gave suggestions.
Btw, I think I should consider learn more about these scrpit language after this.
Once again, thank you guys so much Smilie.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Adding line in a file using info from previous line

I have a shell script that looks something like the following: mysql -uroot db1 < db1.sql mysql -uroot db2 < db2.sql mysql -uroot db3 < db3.sql mysql -uroot db4 < db4.sql .... different db names in more than 160 lines. I want to run this script with nohup and have a status later. So,... (6 Replies)
Discussion started by: MKH
6 Replies

2. Shell Programming and Scripting

Adding tab/new line at the end of each line of a file

Hello Everyone, I need a help from experts of this community regarding one of the issue that I am facing with shell scripting. My requirement is to append char's at the end of each line of a file. The char that will be appended is variable and will be passed through command line. The... (20 Replies)
Discussion started by: Sourav Das
20 Replies

3. Shell Programming and Scripting

adding a line to a text file

I have a tab delimited text file, id name distance 1 3325167 0.334561754018 2 3290488 0.389444269458 3 3288794 0.392312701782 4 3347602 0.392532202097 5 3295355 0.394394169485 I need to add a line after the header line. The first and third field of... (3 Replies)
Discussion started by: LMHmedchem
3 Replies

4. Shell Programming and Scripting

Adding New empty line in a file

Hi, I am new to Sed /awk commands. using that i want to add new empty line after every line in a file by leaving first three lines. So, can any one help me out how to achieve this. Example: --------- Input Filename: file1.txt Input Data: --------Report-------- Date:20-10-03... (4 Replies)
Discussion started by: G.K.K
4 Replies

5. Shell Programming and Scripting

Adding data in a file on same line

Hi, I have one file a.txt ,the contents of the file is A B C D E F and I have another file b.txt, the contents of the file is 1 2 3 4 5 6 now when I am using this command cat a.txt b.txt > c.txtI am getting the output as A B C D E F 1 2 3 4 5 6 but i need the output... (2 Replies)
Discussion started by: prarat
2 Replies

6. Shell Programming and Scripting

adding a line to file

i am writing a script which will let user to input a line. i m not sure how do i add this line to the end of a txt file ? (8 Replies)
Discussion started by: 76455
8 Replies

7. Shell Programming and Scripting

Adding filename to each line of the file

Hi, I am a relative new bee in scripting. I need to develop a script such that the code would iterate through each file in a source directory and append every line of the file with '|' and the corresponding file filename. eg INPUT file IF927_1.dat - H|abc... (4 Replies)
Discussion started by: scripting_newbe
4 Replies

8. Shell Programming and Scripting

Adding a line to a file

Hi guys, How to add a line before a specific line (identified with the starting work ex: xxx) of a file and write it back to the same file? Thanks (12 Replies)
Discussion started by: mwrg
12 Replies

9. Shell Programming and Scripting

adding a line to a file

I want to add a line at the beginning and at the end of a file.. e.g. echo "at the beginning.." > tmp_file && cat file >> tmp_file && echo "last line" >> tmp_file && mv tmp_file file is there a nice way for doing that?? Thx (2 Replies)
Discussion started by: andy2000
2 Replies

10. Shell Programming and Scripting

Adding Text To each line of a file

How would I add text to the beginning of each line in a text file in a script right after the file is created from another text file. (4 Replies)
Discussion started by: cubs0729
4 Replies
Login or Register to Ask a Question