一般的なガイドライン:
私は同じ問題に何度も直面し、ステップバイステップのスクリプトで解決しました。しかし、パイプと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