我有一个文件,其中包含多个提供 ID 的条目,另一个文件包含其他条目,这些条目细分为由 TAB 分隔的不同字段。我需要根据第一个文件的匹配值选择第二个文件的记录。我在网上看到 AWK 是正确的工具(尽管 GREP 可能更简单),但我没有得到任何输出。
对于此示例,我使用数组而不是文件,但为了使用 awk,我必须创建一个临时文件。本质上,我需要将第二个文件 (var2) 的第三个字段与第一个文件 (var1) 提供的值进行匹配。var2 的选择形式应该是:“shameText\t someWhat\t beta\t thatIs”,我从中只打印第一个字段,因此输出应该只是:“shameText”。我可能错过了分配数组的正确方法,但无论如何,此示例只是文件上真实匹配的代理。
问题是:如何根据字段和变量值之间的匹配来选择一行(记录)或单个字段?
例子:
var1="alpha beta gamma delta epsilon"
var2="
'someText somethingElse zeta someMore'
'sameText someElse kappa andMore'
'shameText someWhat beta thatIs'
'shortText moreElse theta andMore'"
echo $var2 > tempFile
for i in $var1
do
printf "i is: %s\n" $i
awk -F\t '$3 == "$i" {print $1}' tempFile
echo "next item"
done
rm tempFile
答案1
更简单的awk
解决方案可能是将 $3 与正则表达式进行比较。
awk '$3 ~ /alpha|beta|gamma|delta|epsilon/ {print $1}' tempFile
将列表传递为$var1
awk '$3 ~ /'"${var1// /|}"'/ {print $1}' tempFile
如果 $var1 是一个文件,你可以用 cat 将其传递给 awk
awk '$3 ~ /'"$(cat IDs|tr ' ' '|')"'/ {print $1}' tempFile