String 如何将从文件中读取的数字从str转换为int?
我使用bash,我必须读取一个包含许多行的文件 每行由一个数字组成。然后,对于每一行(数字),我必须检查值是否大于80 这是我的问题,无论我尝试什么,我总是得到:String 如何将从文件中读取的数字从str转换为int?,string,bash,shell,integer,String,Bash,Shell,Integer,我使用bash,我必须读取一个包含许多行的文件 每行由一个数字组成。然后,对于每一行(数字),我必须检查值是否大于80 这是我的问题,无论我尝试什么,我总是得到: >integer expression expected 在if条件之后。这是因为我用来输入行值的变量是字符串 这是我的原始文件 [root@michelep_centos2 ~]# cat temp1 0 0 0 98 0 0 79 0 81 在bash脚本中,我有 ##!/bin/bash file=
>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"
这里,if条件返回“预期的整数表达式”
我也用过echo
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
第一个操作:
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
尝试以下-干净的纯Bash代码:
#! /bin/bash -p
file=/root/temp1
while read -r line ; do
(( line > 80 )) && echo "$line > 80"
done <"$file"
!/bin/bash-p
文件=/root/temp1
当读取-r行时;执行
((行>80))&回显“$line>80”
完成尝试此-干净的纯Bash代码:
#! /bin/bash -p
file=/root/temp1
while read -r line ; do
(( line > 80 )) && echo "$line > 80"
done <"$file"
!/bin/bash-p
文件=/root/temp1
当读取-r行时;执行
((行>80))&回显“$line>80”
我得到了这个错误:“)语法错误:无效的算术运算符(错误标记为“@MichelePardini,搜索错误消息会导致错误。我怀疑答案适用于您的情况。另请参阅的“询问问题代码之前”部分中的第一条建议。我得到了这个错误:”)语法错误:无效的算术运算符(错误标记为“@MichelePardini,通过谷歌搜索错误消息会导致错误。我怀疑答案适用于您的情况。另外,请参阅.awk中“询问问题代码之前”部分的第一条建议。该建议有效,但不符合我的要求。而对于脚本,则为“如果[$line=~^[0-9]+$]”;然后”不会通过。所以什么都不会发生,都是字符串。顺便说一句,在文件中我没有空格,只有数字,每行一个。我开始认为问题出在文件中。awk可以工作,但不符合我的要求。而对于脚本,这是“如果[[$line=~^[0-9]+$];然后”不会通过。所以什么都不会发生,都是字符串。顺便说一句,在文件中我没有空格,只有数字,每行一个。我开始认为问题出在文件中。您应该尝试的第一个操作是dos2unix-f inputfile
,然后尝试以下解决方案。您应该尝试的第一个操作是dos2unix-f inputfile
,然后尝试以下方法w解决方案。