UNIX script

Hi I want to export the databases from netezza to teradata. For this I want to use Named Pipe concept script in unix. I don't know pipe concept. If anyone knows please help me to write the script.

Welcome to the forum.
Please: follow the rules, i.e. post in an adequate forum, give details about your system (OS, shell, preferred tools), be very specific with your question, and show your attempts / efforts so far.

With above post, I wouldn't know where to start, and I doubt anybody could give you a meaningful answer except eventually writing the entire script for you - which definitely weren't the approach of choice.

First off, my revered colleague RudiC is absolutely correct. I will try to explain a bit nevertheless, because it might help you (in the long run) to understand what you (try to) do.

It is generally a good idea to specify your tasks not in terms of methods employed but in terms of goals: "i want to use a car to go somewhere" may be a good idea (if "somewhere" is connected to where you are now by a road) or it might be a bad idea (because between is water and you'd need a ship rather than a car), but that all depends on defining where "somewhere" is. Start with this (and other constraints - you may have a maximum time to get there) and decide upon the methods of transportation only when this is done.

Instead of deciding to use something you don't even know you might explain your goals and the solution might be fitting or it might not - you should decide afterwards.

Now, what is a "pipe": you can picture any process (that is: a running program) to work like a garden hose: you pour data in on top (the "input"), inside something is done with these data (this is is fact the reason the program exists) and the result of this comes out at the bottom (the "output").

Notice that every step is optional: some programs have no input, some programs have no output and - in principle - they might even do nothing with the data passed. If you enter the command like this:

bakunin@system:/some/where # ls -la
total 1872
-rw-------    1 root     system         1024 Sep 25 2013  .rnd
-rw-------    1 root     system        21254 May 18 09:03 .sh_history
drwx------    2 root     system          256 Jun 21 2013  .ssh
drwx------    2 root     system          256 Jul 27 2012  .topasrecrc
-rw-------    1 root     system          431 May 17 18:43 .vi_history
-rw-r-----    1 root     system       215078 May 17 19:04 smit.log
-rw-r-----    1 root     system        14793 May 17 19:04 smit.script
-rw-r-----    1 root     system        24975 May 17 19:04 smit.transaction
drwxr-xr-x    4 root     system          256 May 12 12:44 upd

the command ( ls ) has no input but some output (the directory listing). You might want to process the output of one command by another program. This program will need to take the output of the first command as input. Exactly this mechanism is called a "pipe" - to stay in the picture of the garden hose: you connect the top of the second garden hose to the bottom of the other, so that what comes out of the first is immediately put into (and processed by) the second. UNIX is the OS in which this mechanism was invented (by Doug McIllroy) and many other OSes included it into their own procedures from there. In most cases the mechanism is signified by a "|" character, which is conveniently called a "pipe", because it was used to signify this feature. Here is an example:

bakunin@system:/some/where # ls -la | grep "smit"
-rw-r-----    1 root     system       215078 May 17 19:04 smit.log
-rw-r-----    1 root     system        14793 May 17 19:04 smit.script
-rw-r-----    1 root     system        24975 May 17 19:04 smit.transaction

First, the command ls ( -la are just options) is invoked and it produces the same output as above. This output is not displayed on screen but poured into the grep command, which acts as a filter: it displays only lines that match a certain criteria, in this case the lines that contain the text "smit". Whatever passes this filter is then displayed in the usual way.

Now, that we have established what a "pipe" (or "pipeline", as it is correctly called) is, what is a "named pipe": our pipelines so far requires both processes to be run immediately one after the other or seemingly together. Suppose we would want to run the two commands NOT at the (almost) same time: we would need to "store" the intermediate results of the first command somewhere so that the second, whenever it is started, can pick it up.

It is possible to do that with a file: save the output of the first process to a file, then use the files content as input for the second process, whenever it is started. This would work, but the content of the file would not go away once it is indeed processed. If you call the second process a second time it would reuse the stored data from the file in the same way it used them in the first run.

A "named pipe" is a sort-of file, but one which deletes the content once it has been processed in the same way that the output of the first process is destroyed (as it is) by processing it with the second process in the pipeline. This way you make sure that you process things only once and you discard them once they are processed.

I hope this helps.

bakunin