Linux

從查找表中分配值的 Shell 腳本太慢了

  • March 15, 2018

我正在嘗試使用 shell 腳本從查找文件中分配一些變數。

我有一些工作,但似乎不必要的慢。

腳本:

while read line           
   do           
       code=`echo $line | awk -F' ' '{print $1}'`;
       device=`echo $line | awk -F' ' '{print $2}'`;
       state=`echo $line | awk -F' ' '{print $3}'`;
       if  [[ $code == $message ]]
           then
               echo "Translated: $device-$state";
       fi
done <CODE-LIST.txt

程式碼列表.txt:

MQTT-CODE   DEVICE  STATE
1-1-32-16236607 RGB_LED ON
1-1-32-16203967 RGB_LED OFF

有沒有更快的方法來做到這一點?(也許是 awk 或 sed)

感謝您的幫助!

怎麼樣:

while read code device state junk; do
   if [[ $code == $message ]]; then
       echo "Translated: $device-$state"
   fi
done <CODE-LIST.txt

使用額外的程序(即每次都分叉 awk)會減慢它的速度。read將讀取多個欄位,以分隔$IFS(預設值是所有空格)。列出的最後一個變數將接收該行的其餘部分(如果有)。

我只是想知道$message應該從哪裡來。也許在程式碼片段之外?

編輯:如果程式碼部分只會在輸入中出現一次,那麼break一旦找到它就可以退出循環;這也會加快速度。

引用自:https://unix.stackexchange.com/questions/163964