1

次の形式でファイルを解析する必要があります。

line1_param1:line1_param2:line1_param3:
line1_param2:line2_param2:line2_param3:
line1_param3:line3_param2:line3_param3:

そして、現在の行からすべてのパラメーターを抽出して、行ごとに処理します。現在、私はそのような方法でそれを管理しています:

IFS=":"
grep "nice" some_file | sort > tmp_file
while read param1 param2 param3
do
  ..code here..
done < tmp_file
unset IFS

一時ファイルの作成を回避するにはどうすればよいですか?

残念ながら、これは正しく動作しません:

IFS=":"
while read param1 param2 param3
do
  ..code here..
done <<< $(grep "nice" some_file | sort)
unset IFS

行全体がparam1に割り当てられているため。

4

2 に答える 2

6

これにはプロセス置換を使用できます。

while IFS=: read -r param1 param2 param3
do
   echo "Any code here to process: $param1 $param2 $param3"
done < <(grep "nice" some_file | sort)
于 2014-09-03T07:39:47.900 に答える
3

bash4.2 以降を使用している場合は、「自然な」パイプラインを使用するオプションを有効にすることができますlastpipe。ループはwhileサブシェルではなく現在のシェルで実行されるため、設定または変更した変数はパイプラインの後に表示されます。(デモンストレーションのためのanubhavaの素晴らしい答えからコードを盗む。)

shopt -s lastpipe
grep "nice" some_file | sort | while IFS=: read -r param1 param2 param3
do
   echo "Any code here to process: $param1 $param2 $param3"
done
于 2014-09-03T12:54:19.770 に答える