2016-12-28 54 views
0

我试图得到这个当“行”的格式为### ###的工作数据的转换浮点数整数通过文件读取

示例行:

Query_time: 188.882 

当前脚本:

#!/bin/bash 

while read line; do 
    if [ $(echo "$line" | cut -d: -f2) -gt 180 ]; 
    then 
     echo "Over 180" 
    else 
     echo "Under 180" 
    fi 
done < test_file 

错误,我得到:

./calculate: line 4: [: 180.39934: integer expression expected 
+0

我添加了错误输出 – user3299633

回答

1

可以使用此AWK:

$ echo Query_time: 188.882 | awk '{ print ($2>180?"Over ":"Under ") 180 }' 
Over 180 

它以第二空间分隔的字段($2)和使用条件运算输出,如果它是在或(小于或等于)180.

2

如果您有:

line='Query_time: 188.882' 

这个表达式:

$(echo "$line" | cut -d: -f2) -gt 180 

会给出错误invalid arithmetic operator因为BASH无法处理浮点数。

可以使用此awk命令:

awk -F ':[ \t]*' '{print ($2 > 180 ? "above" : "under")}' <<< "$line" 
above 
+1

我想我真的没有必要使用'int'。或者那个'-F'。这真的是7点30分AM在这里... –

0

user3299633,当然像詹姆斯的nic e解决方案。只有我在if和else条件下才能做到这一点。

awk '{if($2>180){print "over 180"} else {print "under 180"}}' Input_file 

希望这会有所帮助。