bash スクリプトを行ごとに読み取る

bash スクリプトを行ごとに読み取る

こんにちは。ファイルを読み取って必要な変数をすべて取得し、それを別のコマンドで使用するスクリプトを作成しようとしています。しかし、スクリプトを実行する代わりに printf を試みたところ、空の出力が返されたため、変数が記憶されていないようです。

これが私のコードです

#!/bin/bash
numparams=$#
params=$*
cat tots.txt | while read;
do  awk '{
regid=$1;
uport=$2;
ongoingcalls=$3;
ingeg=$4;
maxcalls=$5;
if($3<$5) state=0
if($3==$5) state=1
if($3>$5) state=2
}'
/home/send_script.sh -o "$regid $uport $ongoingcalls $ingeg $maxcalls $state"
done

tots.txt の内容は次のとおりです。

ここに画像の説明を入力してください

答え1

これは、 と入力して開いたサブシェルで変数が設定されているためですcat <file> | while ...。したがって、このサブシェルが終了すると、それらの変数にはアクセスできなくなります。

代わりに、次のように言います。

while read; do
    ...
done < tots.txt

興味深い読み物:パイプライン内のループに変数を設定しました。ループが終了すると変数が消えてしまうのはなぜですか? または、データをパイプして読み取ることができないのはなぜですか?

awkまた、と変数について混乱しているようですshell。 に設定した内容はawkそのまま残るため、 という発言は2 度間違っています。awk の変数は(は列番号を参照します)awk '{$var=2}'なしで設定され、 var は のスコープ内にあるため、シェルでは使用できません。$$varvarawk

次のようなことをしたいかもしれません:

results=($(awk 'BEGIN {print 1,2,3,"a"}'))

results[]後でアクセスできる配列を作成します。

関連情報