- ベストアンサー
gzipで圧縮されたファイルを伸張して保存
gzipで圧縮されたファイル(sample.txt.gz)を伸張して「sample.txt」として保存し直したいのですが、スクリプト内でどういうふうに書けばいいのかわかりません。 gzipのパスは、#!/bin/gzip gunzip sample.txt.gz や gzip -d sample.txt.gz のコマンドを使うらしいことはわかったのですが、これをどうスクリプト中に書けばいいのか。。。 どなたかわかる方、教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 >ということは、伸張して「sample.txt」として保存し直す場合は、 >system( "gunzip sample.txt.gz > sample.txt" ); >こんな感じで良いのでしょうか? 結果を標準出力に出力するオプション「-c」が必要です。 system( "gunzip -c sample.txt.gz > sample.txt" ); >ふと今思ったのですが、これそのまま変数に入れることってできます? >$sample = system( "/bin/gunzip sample.txt.gz" ); >みたいな。。。 バッククォート「`」を使用します。 $sample = `gunzip -c sample.txt.gz`;
その他の回答 (3)
- FoggyMountain
- ベストアンサー率21% (79/372)
>と今思ったのですが、これそのまま変数に入れることってできます? >$sample = system( "/bin/gunzip sample.txt.gz" ); >みたいな。。。 Perlはまったく素人なんですけど、こんな感じでしょうか。 まずzcatコマンドを使うことで、圧縮ファイル自身は解凍せずにファイル内容を取り出せます。 それを1行ずつ、配列変数@strに格納します。 @strから1行ずつline変数に取り出して表示してみました。 #!/usr/bin/perl @str = `zcat sample.txt.gz`; foreach $line (@str) { print $line; }
お礼
なるほど、そういう方法もあるんですね。 勉強になりました。 今度試してみます。 ありがとうございました。m(__)m
- FoggyMountain
- ベストアンサー率21% (79/372)
パスが通っていない可能性もありますので、(大丈夫だとは思いますが) コマンドはフルパスで指定するようにしてください。 #/usr/bin/perl system( "/bin/gunzip sample.txt.gz" ); system( "/bin/gzip -d sample.txt.gz" );
お礼
回答ありがとうございます。 パスはたぶん通っていると思います。 早速試してみます。 ふと今思ったのですが、これそのまま変数に入れることってできます? $sample = system( "/bin/gunzip sample.txt.gz" ); みたいな。。。
- shuyamakawa
- ベストアンサー率67% (111/164)
単純にコマンド実行するだけであれば system( "gunzip sample.txt.gz" ); system( "gzip -d sample.txt.gz" ); 等としてください。
お礼
早速の回答ありがとうございます。 ということは、伸張して「sample.txt」として保存し直す場合は、 system( "gunzip sample.txt.gz > sample.txt" ); こんな感じで良いのでしょうか?
お礼
shuyamakawaさん、丁寧な解説ありがとうございます。 何とかイメージ通りにできました。 また何かありましたら、よろしくお願いします。m(__)m