首页 > 解决方案 > 如何在其子文件的第 2 列中 grep 包含值范围(-6 到 -7)的文件名?

问题描述

我有 5000 个目录(ligand_0001 到配体_5000)。每个都包含作为 log.txt 的子文件名,其中包含第 2 列中的分数。我想提取所有目录名称 (ligand_*),它们的日志文件在第二列中包含 -6 到 -7 分数。

   1         -6.1      0.000      0.000
   2         -6.1      2.657      3.713
   3         -5.9     26.479     28.383
   4         -5.9     27.924     30.549
   5         -5.8      4.579      8.657
   6         -5.8     26.841     28.725
   7         -5.8     25.192     27.089
   8         -5.6      3.119      4.640

这是配体_0005 文件夹中的子文件 (log.txt)。我只想要文件夹的名称,因为它在第 2 列中包含 -6 到 -7 值(即配体_0005)

标签: linuxshellawkgrep

解决方案


使用 awk 确定第二列中是否存在数字,遍历文件夹并检查每个文件夹的 log.txt

ARRAY=()
for i in ligand_*
do
  if [[ ! -z $(awk '$2>=-7 && $2<=-6' ${i}/log.txt) ]]
  then
   ARRAY+=("${i}")
  fi
done
printf '%s\n' "${ARRAY[@]}"

推荐阅读