Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在文件中查找数字(脚本、bash)_Linux_Bash_Command - Fatal编程技术网

Linux 在文件中查找数字(脚本、bash)

Linux 在文件中查找数字(脚本、bash),linux,bash,command,Linux,Bash,Command,我想在文件中查找数字或单词。作为第一个参数,它获取您要查找的文件名和第二个数字 例如,我在命令行中编写: bash script.sh file.txt 6 我得到了输出 Number 6 repeats 4 time 这是file.txt中的内容 5 4 5 6 2 4 6 3 6 6 这就是我找到并坚持的代码 para2=$2 while read line do array=($line) echo "Value of third element in my arra

我想在文件中查找数字或单词。作为第一个参数,它获取您要查找的文件名和第二个数字

例如,我在命令行中编写:

bash script.sh file.txt 6
我得到了输出

Number 6 repeats 4 time
这是file.txt中的内容

5 4 5 6 2 4 6 3 6 6
这就是我找到并坚持的代码

para2=$2
while read line
do
    array=($line)
    echo "Value of third element in my array : ${array[3]} "
done < $1
para2=$2
读行时
做
数组=($line)
echo“我的数组中第三个元素的值:${array[3]}”
已完成<$1
我不知道如何将参数2与每个数组进行比较。我知道在上面的代码中我打印出了第三个数组,但我不知道如何遍历每个数组并将它们与参数2进行比较。我的意思是,我要遍历所有的数字,并与输入参数进行比较。请提供帮助

尝试以下操作:

numOccurences=0

while read line
do
    array=($line)

    for i in "${array[@]}"
    do
       if [ "$2" = "$i" ]
       then
           numOccurences=`expr $numOccurences + 1`
       fi
    done
done < $1

echo "$2 occurs $numOccurences times in $1"
命令:

/Users/Robert/Desktop/Untitled.sh /Users/Robert/Desktop/file.txt 6
输出:

6 occurs 8 times in /Users/Robert/Desktop/file.txt
para2=$2
计数器=0
读行时
做
对于$line中的num
做
如果[$num-eq$para2]]
然后让计数器=((计数器+1))
fi
完成
完成<“$1”
回波号$para2重复$counter次
#/bin/bash
echo“要搜索的号码$2”
echo“传递的文件名:$1”
文件名=$1
计数=0
读行时
做
对于$line中的单词;做
#echo“Number=$word”
如果[“$2”==“$word”];然后
计数=$(expr$count+1)
fi
完成
完成<$filename
观察到回声$2的次数为$count次

66(oops)6,算作36还是66加16?很抱歉,但是您的示例代码'echo'值为第三“。。。似乎不符合你的既定目标。祝你好运。66(哦)6不算6。只有当您输入数字66(oops)6时,它才会计数。没问题!很高兴我能帮忙。你能解释一下数组[@]中@的含义吗。还有什么解释?Thanks@user3127680
数组[@]
中的
@
返回
数组中的所有值,即
5 4 5 6 2 4…
。循环使
i
通过这些值,因此在第一次迭代中,
i=5
,然后在第二次迭代中,
i=4
,然后
i=5
,然后
i=6
,等等。@user3127680
expr
是一个返回算术表达式结果的命令。有关详细信息,请参阅。@user3127680如果答案对您有帮助,请不要忘记标记答案。您可以单击答案旁边的勾号,使其变为绿色。您可以在脚本中使用$1、$2直接访问传递的参数。请确保您知道这些参数的位置,因为它们是位置参数。正如您所要求的,expr用于执行数学计算,它内置于数学工具中。由于您希望扫描行本身中的数字/字,而不是逐行扫描,因此您可以在读取文件时循环扫描行中的字,然后将数字与从文件中读取的数字匹配,并不断递增计数器。简单?如有任何问题/疑问,请告诉我:)
6 occurs 8 times in /Users/Robert/Desktop/file.txt
para2=$2
counter=0
while read line
do
    for num in $line
    do
        if [[ $num -eq $para2 ]]
        then let counter = ((counter + 1))
        fi
    done
done < "$1"
echo Number $para2 repeats $counter times
#!/bin/bash

    echo "Number to be searched $2 "
    echo "File name passed : $1"

filename=$1
count=0

while read line
do
   for word in $line; do
        #echo "Number = $word"
        if [ "$2" == "$word" ]; then
           count=$(expr $count + 1)
        fi
    done
done < $filename

echo $2 is observed $count times