gpt4 book ai didi

python - 根据键从表中获取所需数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:47 24 4
gpt4 key购买 nike

我在文件中有一个数据集,由三列(IP地址、端口、域名)组成,如下所示:

172.56.146.16 61981 r5---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.13 64576 r2---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.46 56483 ssl.gstatic.com
172.56.146.14 57054 r3---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.14 58157 r3---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.18 62666 ssl.gstatic.com
172.56.146.15 55682 r4---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.16 52234 r5---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.59 57106 ssl.gstatic.com
172.56.146.18 58897 ssl.gstatic.com
172.56.146.16 52258 r5---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.15 55694 r4---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.32 64281 ssl.gstatic.com
172.56.146.39 60581 ssl.gstatic.com
172.56.146.13 57137 r2---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.14 64763 r3---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.13 57135 r2---sn-uhvcpax0n5-x5ue.googlevideo.com
172.56.146.15 51318 r4---sn-uhvcpax0n5-x5ue.googlevideo.com

我还在文件中设置了一个 key ,仅由 IP 地址和端口组成:

172.56.146.15 49333
172.56.146.16 52233
172.56.146.46 56483
172.56.146.14 58928
172.56.146.16 61981
172.56.146.13 64576
172.56.146.14 58157
172.56.146.18 62666
172.56.146.15 55682
172.56.146.14 57054

现在我想一一考虑键集中的所有行,将其作为我的数据集的输入,作为返回,我应该能够从数据集中获取每个键的域名(IP 地址和端口取自 key 集)。

例如,对于 172.56.146.15 49333,我可以得到结果“找不到域”,对于 172.56.146.46 56483,我应该得到结果 ssl.gstatic.com 等等。谁能告诉我如何使用 shell 命令或脚本来做到这一点,以便生成的输出如下(与键集中的键一一对应):

domain not found
ssl.gstatic.com
r5---sn-uhvcpax0n5-x5ue.googlevideo.com

最佳答案

两种解决方案,都是将数据文件读入一个数组,然后在 key 文件中查找每一行的数组值。

  1. “纯”Bash(仅内置):

    #!/bin/bash

    # Declare associative array
    declare -A datafile

    # Read data file into associative array
    while read -r ip_addr port domain; do
    datafile["$ip_addr $port"]="$domain"
    done < "$1"

    # Look up value for each key from key file in array
    while IFS= read -r key; do
    # Use parameter expansion to print "not found" if key is not in array
    printf "%s\n" "${datafile[$key]:-domain not found}"
    done < "$2"

    调用如下:

    ./SO.sh data keys

    其中 SO.sh 是脚本文件的名称,data 是数据文件,keys 是包含 key 的文件。

  2. 错误:

    #!/usr/bin/awk -f

    # Process first file, read into array
    NR == FNR {
    datafile[$1, $2] = $3
    next
    }

    # Look up value for key
    {
    if (datafile[$1, $2] == "")
    print "domain not found"
    else
    print datafile[$1, $2]
    }

    这样调用,假设存储在SO.awk中,如下:

    ./SO.awk data keys

对于大型文件,awk 解决方案会快几个数量级。

关于python - 根据键从表中获取所需数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35824180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com