質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

Q&A

解決済

1回答

448閲覧

シェルのパイプ処理で、標準出力の先頭行だけを読んでその文字列によって後の処理を変更させることはできますか?

noc

総合スコア73

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

0グッド

0クリップ

投稿2022/07/13 11:59

前提

あるコマンドが標準出力した文字列の一行目の内容によって、残りの文字列の処理を振り分けることを(パイプなどを使って)並列に処理させることはできますか?
シェル:bash(あるいはzsh )

例えば、以下のコードの場合、somecmd が出力した内容をいったんすべて outs 配列に入れて、その一行目が fzf なら残りの出力を fzf に渡し、そうでなければそのまま出力しています。
しかしこれですと、somecmd の処理が終了するまで待機することになるので、somecmd に時間がかかる場合、並列処理できません。

bash

1IFS=$'\n' outs=($(somecmd)) 2if [[ "${outs[0]}" = "fzf" ]]; then 3 for str in "${outs[@]:1}"; do 4 echo "$str" 5 done | fzf 6else 7 for str in "${outs[@]:1}"; do 8 echo "$str" 9 done 10fi

何とか並列処理的に一行目を参照して二行目から処理を振り分ける方法はないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

出来ます。
サンプル:
programの出力の1行目がNなら、2行目以降に1から行番号を振って、N以外ならそのままファイルに書く。

sh

1program | ( 2read firstline 3if [ "$firstline" = N ] 4then cat -n 5else cat 6fi 7) > output.txt

投稿2022/07/13 12:21

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問