Bash 使用FOR循环将列表中的项与数组中的项进行比较
基本上,我是从用户提供的文件创建一个IP地址数组,没有太多的漏洞。然后我有另一个文件,有三列数据和多行,第一列是IP地址 我要做的是循环遍历包含3列数据的文件,并将IP地址与数组中的值进行比较,如果数组中的文件中存在值,则打印一些文本以及文件该行的第3列 我有一种感觉,我采取了一种非常错误的方法,使事情变得比他们需要的困难得多 下面是半伪代码Bash 使用FOR循环将列表中的项与数组中的项进行比较,bash,shell,file,scripting,Bash,Shell,File,Scripting,基本上,我是从用户提供的文件创建一个IP地址数组,没有太多的漏洞。然后我有另一个文件,有三列数据和多行,第一列是IP地址 我要做的是循环遍历包含3列数据的文件,并将IP地址与数组中的值进行比较,如果数组中的文件中存在值,则打印一些文本以及文件该行的第3列 我有一种感觉,我采取了一种非常错误的方法,使事情变得比他们需要的困难得多 下面是半伪代码 #!/bin/bash scopeFile=$1 data=$2 scopeArray=() while IFS= read -r line; d
#!/bin/bash
scopeFile=$1
data=$2
scopeArray=()
while IFS= read -r line; do
scopeArray+=("$line")
done <$1
for line in $2; do
if [[ $line == scopeArray ]]; then
awk '{print $3 " is in scope!"}' $2;
else
echo "$line is NOT in scope!"
fi;
done
192.168.0.14
192.168.0.15
192.168.0.16
192.168.0.14:example.com
192.168.0.15:foobar.com
192.168.0.19:test.com
这里有一种方法可以满足您的需求
#/usr/bin/env bash
映射文件-t范围数组<“$1”
而read-r col1 col2 col3;做
对于“${!scopeArray[@]}”中的项;做
如果[[$col1==“${scopeArray[item]}”];然后
printf“%s”在范围内\n'$col3“
取消设置“scopeArray[项目]”&中断(&B)
其他的
printf“%s”不是作用域\n'$col1“>&2
fi
完成
完成<“$2”
- shell即使不是比较文件的最佳工具,也不是最好的工具,但它将缓慢但肯定地帮助您实现这一目标
是一个bash4+特性jyfimapfile
scope.txt=$1
data.txt=$2