画面に書き込むことなく結果を複数のコマンドにパイプ

画面に書き込むことなく結果を複数のコマンドにパイプ

解凍したい非常に大きなzipファイル(〜10 GB)があり、その結果は2つのコマンドで渡される必要があります。 2つの後続のコマンドの結果をファイルに追加する必要があります。

現在私は走っています

unzip -p bigFile.zip | head -n 1 >> output.txt
unzip -p bigFile.zip | grep -v 'skipLine' >> output.txt

これは約100万行を提供します。もう一行にしたいです。使い始めtee

unzip -p bigFile.zip | tee >(head -n 1 >> output.txt) >(grep -v 'skipLine' 
>> output.txt)

ただし、output.txtファイルには51行しか含まれておらず、最後の行は完全ではありません。また、後者のコマンドは、私が望んでいない結果を端末に印刷します。

私も試しました

unzip -p bigFile.zip | tee >(head -n 1 >> output.txt) | grep -v 'skipLine' 
>> output.txt

しかし、残念ながらこれも機能しません。

どんな助けでも大変感謝します!を使用する必要はありません。ウィジェットの出力をandコマンドにtee渡すことができる限り、他のコマンドはうまく機能します。unzipheadgrep

編集する:headそして、コマンドの出力を「結合」してから渡すことができれば、はるかにgrep良いでしょうzip。可能ですか?

ベストアンサー1

最初の行を取得して印刷し、grepが残りの部分を使用できるようにするシェルスクリプトを解凍してパイプすることができます。

unzip -p bigFile.zip | {
    IFS= read -r header       # consume the first line, verbatim
    printf "%s\n" "$header"
    grep -v 'skipLine' 
} >> output.txt

ブロックから印刷された内容はすべて出力ファイルに追加されます。

おすすめ記事