接続パイプを使用した部分リダイレクト

接続パイプを使用した部分リダイレクト

遠隔地には変わり続ける自動生成ファイルがありますssh user@ip cat luckyNumbers

Today's lucky number are 
1 2 3 
asdsa@!#SAxAaas 21gv3sad ASD@!#

私の目標は

  • 幸運な数字を1 2 3Luckynumbers.txtにリダイレクトし、
  • 残りのファイルを自分のプログラムにパイプします。decoder
  • ファイル全体を保存したり、ファイルに対する2番目の要求を行わずにこれを実行したいと思います。

このようにデータストリームを分割することが可能かどうかはわかりません。

答え1

以下は、他のすべての行をstdoutに送信しながら、stdinの行2を特定のファイルに書き込むいくつかの方法です。

sedを使用してください:

ssh remotehost cat luckynumbers |
sed -e '2 { w luckynumbers.txt
            d
          }' |
decoder

awkを使用してください:

ssh remotehost cat luckynumbers |
awk 'NR == 2 { print > "luckynumbers.txt" }
     NR != 2 { print }' |
decoder

入力の最後の行が改行で終わらない場合、awkは改行を追加できます。

答え2

cat luckynumber | tail -q -n 2 | head -q -n 1 > luckynumbers.txt && cat luckynumber | tail -w -n 1 | decoder
  • 次を得る幸運の数
  • 静かに(ソースファイルを引用せずに)最後の2行を取り出します。
  • 最後の行から2行目を次に送信します。幸運の数字.txt
  • コンテンツピックアップ幸運の数再び
  • 最後の行だけをすばやく削除
  • そしてそれをパイプでデコーダ

私はそれがファイルに対して2番目の要求をすることを知っており、代替ファイルが2番目の要求をしないようにこれを改善しようとします(おそらくティー)、しかし今はこれが私が持っているものです。

関連情報