擅长:python、mysql、java
<p>两种解决方案,都是将数据文件读入数组,然后查找密钥文件中每行的数组值。你知道吗</p>
<ol>
<li><p>“纯”Bash(仅内置):</p>
<pre><code>#!/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"
</code></pre>
<p>这称为:</p>
<pre><code>./SO.sh data keys
</code></pre>
<p>其中,<code>SO.sh</code>是脚本文件的名称,<code>data</code>是数据文件,<code>keys</code>是带有键的文件。</p></li>
<li><p>Awk公司:</p>
<pre><code>#!/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]
}
</code></pre>
<p>假设它存储在<code>SO.awk</code>中,则调用它,如下所示:</p>
<pre><code>./SO.awk data keys
</code></pre></li>
</ol>
<p>对于大文件,awk解决方案的速度将提高几个数量级。你知道吗</p>