使用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 循环将列表中的子值相互比较?

如何在不使用 for 循环的情况下将列表中的所有项目与整数进行比较

使用 for 循环删除列表中的项目

通过将第一个列表中的第一行项与第二个列表中的项进行比较来创建新列表

我希望在代码上有一个'else'语句,使用'for'和'if'语句迭代通过列表来查找作为字典键的项

小程序~列表渲染~key