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.
Yoda
2
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.