Adding new line to file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Adding new line to file
# 1  
Old 05-25-2014
Adding new line to file

Hi everyone,
currently I writing a script for comparing 2 variable in 2 line then output the line with equal value to new file. However, the new file only contain last line only, the earlier line was delete. I do google my problem but still not find the way out. Sorry for my English.
Thank you very much in advance Smilie.

Here is my script somehow look like:

Code:
for(tmp1=1; tmp1<=cnt1; tmp1++){
$line1= `head -tmp1 file1| tail -1`;
@str1=split(/\s/,$line1);
       for(tmp2=1; tmp2<=cnt2; tmp2++){
           $line2= `head -tmp2 file2| tail -1`;
           @str2=split(/\s/,$line2);
           open (OUT, ">out");
           if ($str1[3] eq $str2[3]){
              print OUT "$line1";
           }
       }
}

# 2  
Old 05-25-2014
You are open (OUT, ">out"); in a for loop, which means every single time that the loop iterates, the out file gets recreated anew.

Open the file to write outside the for loop and close it when the loop is finished.
This User Gave Thanks to Aia For This Post:
# 3  
Old 05-25-2014
Showing us the work that you have done is good. But, just showing us a script that is not working without also showing us sample input and expected output makes it hard to guess at all of the things that might be wrong in your script. The script you have shown us seems to be a strange mix of shell and awk statements.

Please tell us what operating system you're using, tell us what shell you're using, show us some sample input, and show us the exact output you want to produce from that sample input.
This User Gave Thanks to Don Cragun For This Post:
# 4  
Old 05-25-2014
By the way, perl has an special variable `$.' (that's $ and period) which might help you read the specific line of a file without resorting to making calls to the external head and tail.

So instead of $line1= `head -tmp1 file1| tail -1`;

maybe something like:
Code:
open my $fh, '<', $file1 or die "$file1: $!";

my $cntl = 1; # or whatever you want
my $line;
while( <$fh> ) {
    if( $. == $ctl ) { 
        $line = $_;
        last;
    }
}
close $fh

# now you can use $line here

This User Gave Thanks to Aia For This Post:
# 5  
Old 05-25-2014
Quote:
Originally Posted by Don Cragun
Showing us the work that you have done is good. But, just showing us a script that is not working without also showing us sample input and expected output makes it hard to guess at all of the things that might be wrong in your script. The script you have shown us seems to be a strange mix of shell and awk statements.

Please tell us what operating system you're using, tell us what shell you're using, show us some sample input, and show us the exact output you want to produce from that sample input.
@Don Cragun, thank you for remind me about the manner Smilie.
my job is rarely relate to scripting and I just make this script due to my colleague request on yesterday so I just try to use what I know and google what I don't. That's why my script look like a bunch of scraps Smilie.
by the way, my OS is Linux Redhat, I'm using Perl which included. My script is used for comparing 2 file which contain lines with this info:
Code:
 coordinate_x coordinate_y  variable_name  value_1 value_2...

My expect output file which contains all lines with same values, another output file contain lines with different values. Currently, I use loop for comparing 2 file but it's seem take time cause input files having few thousand lines each, so I'm finding another way.

Quote:
Originally Posted by Aia
By the way, perl has an special variable `$.' (that's $ and period) which might help you read the specific line of a file without resorting to making calls to the external head and tail.

So instead of $line1= `head -tmp1 file1| tail -1`;

maybe something like:
Code:
open my $fh, '<', $file1 or die "$file1: $!";

my $cntl = 1; # or whatever you want
my $line;
while( <$fh> ) {
    if( $. == $ctl ) { 
        $line = $_;
        last;
    }
}
close $fh

# now you can use $line here

@Aia: thank you so much for your hint. it's just where I stuck Smilie.
Thank you for the suggestion, hope it can reduce the script running time.
# 6  
Old 05-25-2014
I still have no idea what you're trying to compare when you're looking at lines from your two input files and I have no idea what output you're trying to produce. Are you just trying to extract lines from your 2nd input file that have a variable_name in the 3rd field that matches a variable_name in the 3rd field on any line in your 1st input file? If this is what you want, it will be easy to write a small, fast awk script to do what you want.

I repeat: Please show us a small, representative pair of sample input files, and show us the output that should be produced from those input files.
This User Gave Thanks to Don Cragun For This Post:
# 7  
Old 05-25-2014
I want to show you what you're demanding, but I really can't. In my company, pc for working can not access to internet, I have to use another pc which allowed to access internet to go here, and working pc and internet pc are not connected, so there is no way I can show you the infos you want, please pardon me for this.
As I said, my job is rarely relate with scripts. I only know a little C-shell via some scripts for my work verification, know nothing about awk and Perl is just a little since 2 days ago. I use Perl because it can output an excel file (as my colleague told me).

I will try to describe my problem again. I have 2 file which contain lines with these info
Code:
coordinate_x coordinate_y variable_name value1 value2 value3

I need to compare which line in 1st file has same variable_name with 2nd file, which doesn't, then print to excel file one sheet for all same variable_name, another sheet for different variable_name.
Currently, I'm stuck in how to compare them quicker, because my script take terrible long running time for compare them. I'm finding another way to overcome my problem.
Please kindly have some suggestion.

Thank you so much in advance 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