如何在压缩文件中追加一行而不解压缩?

如何在压缩文件中追加一行而不解压缩?
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您可以看出,gzipped 文件可以简单地连接:

高级用法 可以连接多个压缩文件。在这种情况下,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

相关内容