mknod /tmp/oracle.pipe p
sqlplus / as sysdba << _EOF
set escape on
host nohup gzip -c < /tmp/oracle.pipe > /tmp/out1.gz \&
spool /tmp/oracle.pipe
select * from employee;
spool off
_EOF
rm /tmp/oracle.pip
圧縮ファイルout1.gzの末尾にトレーラーを挿入する必要があります。
count=zcat out1.gz |wc -l
トレーラーの挿入方法
T5 (assuming count=5)
最後のファイルはout1.gzなので、解凍する必要はありません。
答え1
man gzip
ご覧のように、pedgzip
ファイルは単にリンクすることができます:
高度な使用法を使用すると、複数の圧縮ファイルをリンクできます。この場合、gunzipはすべてのメンバーを一度に抽出します。たとえば、
gzip -c file1 > foo.gz gzip -c file2 >> foo.gz Then gunzip -c foo is equivalent to
cat file1 file2
cat
これはpedファイルを使用して行うこともできますgzip
。たとえば、次のようになります。
seq 1 4 > A && gzip A
echo 5 > B && gzip B
#now 1 to 4 is in A.gz and 5 in B.gz, we want 1 to 5 in C.gz:
cat A.gz B.gz > C.gz && zcat C.gz
1
2
3
4
5
#or for appending B.gz to A.gz:
cat B.gz >> A.gz
外部ファイルなしでこれを行うには:
echo "this is the new line" | gzip - >> original_file.gz
答え2
私も同様の問題で苦労しています。圧縮SQLダンプに数行を追加することです。私の解決策は@Fiximanの答えに基づいています。
echo 'append this string' | gzip >> out.gz
答え3
スタッフデスクはどれくらい大きいですか? 100万人の従業員がいて、レコードごとに数キロバイトが必要な場合を除き、出力を圧縮する価値さえないかもしれません。
count=$(wc -l out1) ; echo "T$count" >> out1
出力ファイルを作成するときに出力ファイルを圧縮するのに苦労する価値がないことはほとんど確実です。それでは、圧縮されていないプレーンテキストで出力して実行し、圧縮したらどうでしょうかgzip out1
?
select count(*) from employee
または、コマンドの前にいくつかのバリエーションを実行してくださいspool off
。