string - 如何将从文件中读取的数字从str转换为int?
问题描述
我使用 bash,我必须读取一个包含多行的文件
每行由一个数字组成。然后,对于每一行(数字),我必须检查值是否 > 80。
这是我的问题,无论我尝试什么,我总是得到:
>integer expression expected
在 if 条件之后。那是因为我用来放置行值的变量是一个字符串。
这是我的原始文件
[root@michelep_centos2 ~]# cat temp1
0
0
0
98
0
0
79
0
81
在我的 bash 脚本中
##!/bin/bash
file=/root/temp1
while IFS= read -r line
do
if [ 'expr $line /1' -gt 80 ]
then echo "hit>80"
fi
done <"$file"
这里 expr 返回错误,因为 $line 是一个字符串。我试过使用另一个变量
val=$(($line + 0))
if [ $val -gt 80 ]
这里的 if 条件返回“预期的整数表达式”
我也用过回声
val=$(echo "$((line /1))")
if [ $val -gt 80 ]
我明白了
语法错误:算术运算符无效(错误标记是 ...
从 echo 命令,当然还有 if 条件返回
需要整数表达式
解决方案
第一个动作: dos2unix -f inputfile
第二个动作:
从输入文件可以看出它包含空行,这将导致if
比较失败。您可以在检查之上进行额外检查,-gt 80
以确保在传递变量之前$line
使用它不为空,if [ ! -z $line ]
或者更好的是,您可以检查以确保该行是整数,或者可能同时使用 AND。
例子:
while read line;
do
if [[ $line =~ ^[0-9]+$ ]];then
if [ $line -gt 80 ];then
echo "$line is greater then 80"
fi
fi
done <input_file
或者,如果您不想放空 check( [ ! -z $line ]
) ,
此外,这可以使用其他工具(例如awk
一行)来完成,但这可能符合您的要求,也可能不符合您的要求。
awk 'NF && $0>80{print $0 ,"is greater then 80"}' inputfile
推荐阅读
- android - 如何将片段的纵向模式更改为横向全屏视频视图
- xamarin - 将 Appcenter 与 Xamarin 一起使用时,有没有办法避免截断附加属性?
- json - 将 json 正文发送到仅第一个收件人地址
- c# - 使用存储库模式创建多对多关系
- asp.net-core - ASP.NET Core - 没有构造函数参数的 IdentityContext
- c# - GetElementsByName 和 GetElementsByTagName 超出范围异常
- php - 在 Woocommerce 购物车、结帐页面、订单和电子邮件通知中的产品标题上方显示品牌名称
- java - Spring异步数据库交互
- c# - 有没有办法我可以使用一种方法来添加
到字典? - terraform - 如果我尝试在 terraform 中循环事件,则会出错