使用FOR循环来比较列表中的项目和ARRAY中的项目。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用FOR循环来比较列表中的项目和ARRAY中的项目。相关的知识,希望对你有一定的参考价值。
不说太多废话,基本上我是在用户提供的文件中创建一个IP地址数组。然后我有另一个文件,有三列数据和多行,第一列是IP地址。
我想做的是循环浏览有3列数据的文件,并将IP地址与数组中的值进行比较,如果数组中存在来自文件的值,则打印一些文本以及文件中该行的第3列。
我感觉我采取了一个非常错误的方法,让事情变得比他们需要的要难得多!
下面是半伪代码
#!/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
EDIT: 为上下文添加了visulisation的示例文件,data.txt文件是在其他地方动态生成的,但格式总是一样的。
scope.txt=$1
192.168.0.14
192.168.0.15
192.168.0.16
data.txt=$2
192.168.0.14 : example.com
192.168.0.15 : foobar.com
192.168.0.19 : test.com
答案
这是你想要的一种方法。
#!/usr/bin/env bash
mapfile -t scopeArray < "$1"
while read -r col1 col2 col3; do
for item in "${!scopeArray[@]}"; do
if [[ $col1 == "${scopeArray[item]}" ]]; then
printf '%s is in scope!
' "$col3"
unset 'scopeArray[item]' && break
else
printf '%s is not is scope!
' "$col1" >&2
fi
done
done < "$2"
shell不是最好的,如果不是正确的比较文件的工具,但它会让你慢慢但肯定。
mapfile
是一个bash4+的功能jyfi。
以上是关于使用FOR循环来比较列表中的项目和ARRAY中的项目。的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 for 循环的情况下将列表中的所有项目与整数进行比较
通过将第一个列表中的第一行项与第二个列表中的项进行比较来创建新列表