最後に追加のパラメータを持つパイプを使用してください。複数のパラメータを使用してパイプライン命令を正しくブートストラップします。

最後に追加のパラメータを持つパイプを使用してください。複数のパラメータを使用してパイプライン命令を正しくブートストラップします。

一般的なガイドライン:

私は同じ問題に何度も直面し、ステップバイステップのスクリプトで解決しました。しかし、パイプと1本のパイプがあると、私の人生はより快適になることがわかります。

簡単に:

command1 -flag target.file | command2 -flag 

私が理解しているところcommand2によるとcommand1 -flag target.file。ただし、command2最後に追加する必要がある追加のパラメータがあります。したがって、次のように読み取ることができます。

command2 -flag OUTPUTOFCOMMAND1 argument2

パイプを直接使用しようとすると、|もちろん出力を2番目のコマンドの最後にパイプするので、目的のコマンドを取得できません。パイプ出力を2番目の命令の特定の部分にリダイレクトしたいと思います。このような:

command1 -flag target.file | command2 -flag PIPEOUTPUT1HERE argument2

ここで同様の質問を見つけました。前のコマンドの出力を次のコマンドの引数に渡します。しかし、私はもっと一般的で簡単な方法が欲しいです。私が成功せずに使用したように:

command1 | xargs -I{} command2 {}

これは基本的に行われますが、command2 $(command1)出力全体をパイプで接続したいと思います。単純なようにls | grep "something"

私の具体的なケース:

datファイルの最初の行を取得して11行ごとに分割したいと思います。

$ tail -n +2 ac_sweep_m+_-30.00mT.rx | xargs -I{} split -l 2 {} 

ただし、2 番目のコマンドが終了すると、前の出力の各行が渡されます。

"ac_sweep_m+_-30.00mT_"              
split: cannot open '0.000000e+00 0.000363094 -0.000518363 -0.000389763 0 ' for reading: No such file or directory
split: cannot open '2.800000e-11 -0.0853443 -0.00230621 -0.000370474 0 ' for reading: No such file or directory
split: cannot open '6.700000e-11 -0.205325 -0.00375738 0.000241809 0 ' for reading: No such file or directory

パイプラインを特定の場所に正確に接続するにはどうすればよいですか?

答え1

解決策は思ったより簡単です。

これを行うには:

command1 -flag target.file | command2 -flag PIPEOUTPUT1HERE argument2

-正しい起動出力のみ最初のコマンド:

command1 -flag target.file | command2 -flag - argument2

私として、非常にうまく動作します。 datファイルの最初の行を切り取り、ファイルをそれぞれ21行のセクションに分割します。

$ tail -n +2 ac_sweep_m+_-30.00mT.rx | split -l 21 - "ac_sweep_m+_-30.00mT_"
$ ls
ac_sweep_m+_-30.00mT_aa  ac_sweep_m+_-30.00mT_ae  ac_sweep_m+_-30.00mT_ai  ac_sweep_m+_-30.00mT_am  ac_sweep_m+_-30.00mT_aq  
ac_sweep_m+_-30.00mT_ab  ac_sweep_m+_-30.00mT_af  ac_sweep_m+_-30.00mT_aj  ac_sweep_m+_-30.00mT_an  ac_sweep_m+_-30.00mT_ar

関連情報