根据字段值选择数据

根据字段值选择数据

我有一个文件,其中包含多个提供 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

相关内容