Cold Backup of Oracle database.

Hi i need a command to cut the last column from the location in a file and want write a
gzip command like

cat a.txt

/data01/oracle/oradata/vas/data/system01.dbf
/data01/oracle/oradata/vas/data/sysaux01.dbf
/data01/oracle/oradata/vas/data/undotbs01.dbf
/data01/oracle/oradata/vas/data/users01.dbf
/data01/oracle/oradata/vas/data/users02.dbf
/data01/oracle/oradata/vas/data/users03.dbf
/data01/oracle/oradata/vas/data/xdb01.dbf

need to print this command using a.txt.

gzip -c "/data01/oracle/oradata/vas/data/system01.dbf"     > "/backup/vas/system01.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/sysaux01.dbf"     > "/backup/vas/sysaux01.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/undotbs01.dbf" > "/backup/vas/undotbs01.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/users01.dbf"     > "/backup/vas/users01.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/users02.dbf"     > "/backup/vas/users02.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/users03.dbf"     > "/backup/vas/users03.dbf.gz
gzip -c "/data01/oracle/oradata/vas/data/xdb01.dbf"     > "/backup/vas/xdb01.dbf.gz"

Regards
Kaleem.

awk -F'/' '{ print "gzip -c \"" $0 "\" > \"/backup/" $(NF-2),$(NF-1),$NF ".gz\"" }' OFS='/' a.txt

Hi Yoda

The code is not printing the data with spaces between.

[oracle]_vas> awk -F'/' '{ print "gzip -c \"" $0 "\" > \"/backup/" $(NF-2),$(NF-1),$NF ".gz\"" }' OFS='/' a.txt
gzip -c "/data01/oracle/oradata/vas/data/system01.dbf                                    " > "/backup/vas/data/system01.dbf                                    .gz"
gzip -c "/data01/oracle/oradata/vas/data/sysaux01.dbf                                    " > "/backup/vas/data/sysaux01.dbf                                    .gz"
gzip -c "/data01/oracle/oradata/vas/data/undotbs01.dbf                                   " > "/backup/vas/data/undotbs01.dbf                                   .gz"
gzip -c "/data01/oracle/oradata/vas/data/users01.dbf                                     " > "/backup/vas/data/users01.dbf                                     .gz"
gzip -c "/data01/oracle/oradata/vas/data/users02.dbf                                     " > "/backup/vas/data/users02.dbf                                     .gz"
gzip -c "/data01/oracle/oradata/vas/data/users03.dbf                                     " > "/backup/vas/data/users03.dbf                                     .gz"
gzip -c "/data01/oracle/oradata/vas/data/xdb01.dbf                                       " > "/backup/vas/data/xdb01.dbf                                       .gz"
gzip -c "/data01/oracle/oradata/vas/control/control01.ctl                                " > "/backup/vas/control/control01.ctl                                .gz"
gzip -c "/data01/oracle/oradata/vas/control/control02.ctl                                " > "/backup/vas/control/control02.ctl                                .gz"
gzip -c "/data01/oracle/oradata/vas/control/control03.ctl                                " > "/backup/vas/control/control03.ctl                                .gz"
gzip -c "/data01/oracle/oradata/vas/redo/redo01.log                                      " > "/backup/vas/redo/redo01.log                                      .gz"
gzip -c "/data01/oracle/oradata/vas/redo/redo02.log                                      " > "/backup/vas/redo/redo02.log                                      .gz"
gzip -c "/data01/oracle/oradata/vas/redo/redo03.log                                      " > "/backup/vas/redo/redo03.log                                      .gz"

This command is also doing same thing but printing spaces between.

cat a.txt |awk -F'/' '{ print "gzip -c " $0 " >  /backup/"$NF".gz" }'
[oracle]_vas> cat a.txt |awk -F'/' '{ print "gzip -c " $0 " >  /backup/"$NF".gz" }'
gzip -c /data01/oracle/oradata/vas/data/system01.dbf                                     >  /backup/system01.dbf                                    .gz
gzip -c /data01/oracle/oradata/vas/data/sysaux01.dbf                                     >  /backup/sysaux01.dbf                                    .gz
gzip -c /data01/oracle/oradata/vas/data/undotbs01.dbf                                    >  /backup/undotbs01.dbf                                   .gz
gzip -c /data01/oracle/oradata/vas/data/users01.dbf                                      >  /backup/users01.dbf                                     .gz
gzip -c /data01/oracle/oradata/vas/data/users02.dbf                                      >  /backup/users02.dbf                                     .gz
gzip -c /data01/oracle/oradata/vas/data/users03.dbf                                      >  /backup/users03.dbf                                     .gz
gzip -c /data01/oracle/oradata/vas/data/xdb01.dbf                                        >  /backup/xdb01.dbf                                       .gz
gzip -c /data01/oracle/oradata/vas/control/control01.ctl                                 >  /backup/control01.ctl                                .gz
gzip -c /data01/oracle/oradata/vas/control/control02.ctl                                 >  /backup/control02.ctl                                .gz
gzip -c /data01/oracle/oradata/vas/control/control03.ctl                                 >  /backup/control03.ctl                                .gz
gzip -c /data01/oracle/oradata/vas/redo/redo01.log                                       >  /backup/redo01.log                                      .gz
gzip -c /data01/oracle/oradata/vas/redo/redo02.log                                       >  /backup/redo02.log                                      .gz
gzip -c /data01/oracle/oradata/vas/redo/redo03.log                                       >  /backup/redo03.log                                      .gz

If Perl is an option, then one way to fix this is -

$
$ # blank spaces exist between the characters "f" and "$"; the "$" represents the end of line
$ cat -vET a.txt
/data01/oracle/oradata/vas/data/system01.dbf                             $
/data01/oracle/oradata/vas/data/sysaux01.dbf                             $
/data01/oracle/oradata/vas/data/undotbs01.dbf                             $
/data01/oracle/oradata/vas/data/users01.dbf                             $
/data01/oracle/oradata/vas/data/users02.dbf                             $
/data01/oracle/oradata/vas/data/users03.dbf                             $
/data01/oracle/oradata/vas/data/xdb01.dbf                             $
$
$ perl -lne 's/\s*$//; ($x=$_)=~s|^.*/||; print "gzip -c \"$_\" > \"/backup/vas/$x.gz\""' a.txt
gzip -c "/data01/oracle/oradata/vas/data/system01.dbf" > "/backup/vas/system01.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/sysaux01.dbf" > "/backup/vas/sysaux01.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/undotbs01.dbf" > "/backup/vas/undotbs01.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/users01.dbf" > "/backup/vas/users01.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/users02.dbf" > "/backup/vas/users02.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/users03.dbf" > "/backup/vas/users03.dbf.gz"
gzip -c "/data01/oracle/oradata/vas/data/xdb01.dbf" > "/backup/vas/xdb01.dbf.gz"
$
$

---------- Post updated at 11:11 AM ---------- Previous update was at 10:56 AM ----------

Alternatively, you could use the "tr" command to remove blank spaces and then pipe the output to an awk script.

$
$
$ tr -d " " < a.txt | awk -F'/' '{ print "gzip -c " $0 " >  /backup/"$NF".gz" }'
gzip -c /data01/oracle/oradata/vas/data/system01.dbf >  /backup/system01.dbf.gz
gzip -c /data01/oracle/oradata/vas/data/sysaux01.dbf >  /backup/sysaux01.dbf.gz
gzip -c /data01/oracle/oradata/vas/data/undotbs01.dbf >  /backup/undotbs01.dbf.gz
gzip -c /data01/oracle/oradata/vas/data/users01.dbf >  /backup/users01.dbf.gz
gzip -c /data01/oracle/oradata/vas/data/users02.dbf >  /backup/users02.dbf.gz
gzip -c /data01/oracle/oradata/vas/data/users03.dbf >  /backup/users03.dbf.gz
gzip -c /data01/oracle/oradata/vas/data/xdb01.dbf >  /backup/xdb01.dbf.gz
$
$

However, this will remove all spaces from the file, and not just the trailing spaces. Hopefully that is not a problem in your case.