web-dev-qa-db-ja.com

解凍せずに圧縮ファイルに行を追加する方法は?

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

Zipファイルout1.gzの最後にトレーラーを挿入する必要があります。

count=zcat out1.gz |wc -l

トレーラーを挿入する方法

T5 (assuming count=5)

解凍せずにout1.gzの最後に。

7

man gzipから、gzippedファイルを単純に連結できることが読み取れます。

高度な使用法複数の圧縮ファイルを連結できます。この場合、gunzipはすべてのメンバーを一度に抽出します。例えば:

        gzip -c file1  > foo.gz
        gzip -c file2 >> foo.gz

  Then

        gunzip -c foo

  is equivalent to

         cat file1 file2

これは、catpedファイルに対して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 - | cat - >> original_file.gz
16
Fiximan

従業員のテーブルの大きさは? 100万人の従業員がいて、各レコードに数千バイトかかる場合を除いて、出力を圧縮する手間をかける価値はありません。

ほとんどの場合、出力ファイルが作成されているときに圧縮する手間はかかりません。圧縮されていないプレーンテキストに出力し、count=$(wc -l out1) ; echo "T$count" >> out1を実行して_gzip out1_で圧縮しないのはなぜですか。

または、_spool off_コマンドの前にselect count(*) from employeeのバリエーションを実行するだけです。

2
cas

私は同様の課題に取り組んでいました:圧縮されたSQLダンプに数行を追加しました。私の解決策は@Fiximanからの回答に基づいていました

echo 'append this string' | gzip >> out.gz
1
TimmyG