Forum: CFEngine Help
Subject: Append the content of file to another one without checking for 
duplicate lines
Author: jbdenis
Link to topic: https://cfengine.com/forum/read.php?3,26695,26695#msg-26695

Hello,

I tried to achieve something trivial, but I don't get anywhere. 

Imagine you have a big file (1M for example), and you simply want to append its 
content to the end of another file without checking for duplicate. If I'm using 
insert_lines with a "file" insert_type, an "insert_lines" is generated for each 
line in the big file hence a big execution time (insert_lines needs to search 
for duplicate). 

Yes I know it will result in an ever growing file, but at each run I remove 
then insert lines (with the help of location). 

It takes around 60 seconds to append a 2MB file to another one. ncharles on IRC 
reports similar execution time. Each insert_lines statement looks for a 
previously same line in the growing destination file : the executation time is 
exponential I guess.

Here is a sample test, just generate a multiline "big" file in /tmp/bigdata. 
This test will delete and create a file called /tmp/bigfile and then append the 
content of /tmp/bigdata.


body common control
{
bundlesequence => { "biginsert" };
inputs => { "cfengine_stdlib.cf" };
}

body agent control
{
editfilesize => "1M";
}

bundle agent biginsert
{
files:
  # I remove the file for testing purpose
  # to prevent every growing file
  "/tmp/bigfile"
        delete => tidy,
        classes => if_ok("file_deleted");
  file_deleted::
  "/tmp/bigfile"
        edit_line => big_edit("/tmp/bigdata"),
        create => "true";
}

bundle edit_line big_edit(content_from_file)
{
 insert_lines:
   "$(content_from_file)"
     insert_type => "file";
}


To make a long story short, how would you simply append the content of a file 
to another one without checking for duplicate ?

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to