linux - 我想转到一个文件并根据文件中存在的文件名和关键字获取值?

标签 linux shell unix

我是 shell 脚本的新手,所以我需要你们的帮助来实现我的目标。我有一个名为 input.csv 的文件,其中包含如下所示的数据,

G22822 277 OR2
G22822 329 OR9
G22940 286 OR3
G22940 412 OR7
G25365 289 OR3

现在,OR2OR9OR3OR7OR3 是还有名称为 al_or2.capal_or9.capal_or3.capal_or7.cap 的不同文件和 al_or3.cap 在不同的路径。这些 cap 文件中的数据如下所示,

在 al_or2.cap 中:

277 ASCII GRP 184578924
102 ASCII GRP 754815923

在 al_or9.cap 中:

981 ASCII GRP 542189353
329 ASCII GRP 158203981

所有 cap 文件中都存在类似的明智数据。

如果您在 input.csv(G22822 277 OR2) 中看到第一行作为提到的数据,我需要转到 al_or2.cap 并搜索关键字 277 并打印 G22822 和 542189353(G22822 存在于 input.csv 中,542189353 存在于 al_or2 中.cap).

然后,对于这个 G22822 329 OR9,我需要转到 al_or9.cap 并打印 G22822 和 158203981。

我需要的输出如下:

G22822 184578924
G22822 158203981 and so on..

请帮助我实现我的目标。

最佳答案

假设您提供的数据是准确的,并且不知道您的目录结构,这里有一些东西

#!/bin/bash
while read a b c
do
  awk -v a=$a -v b=$b  'b==$1{printf "%s %s\n", a, $4}' tmp/al_$(echo $c | tr '[A-Z]' '[a-z]').cap
done < input.csv

将其保存为 karthik.sh,保存 input.csv 的前两行,创建一个包含文件 al_or2.cap 的子目录 tmp >al_or9.cap 并运行 ./karthik.sh 我得到以下输出:

./karthik.sh 
G22822 184578924
G22822 158203981

关于linux - 我想转到一个文件并根据文件中存在的文件名和关键字获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53443069/

相关文章:

linux - basename 命令混淆

linux - 在另一个环境中解析环境

linux - shell脚本中if else语句中的多个语句

java - 在 Java 中编写跨不同操作系统的换行符

linux - 如果我安装了 SIGCHLD 处理程序,对特定 pid 的 *blocking* 等待是否仍然有效?

c++ - 在 shell 脚本中使用 -D name 编译选项

linux - shell脚本的开关

linux - 使用从制表符分隔的文本文件中读取的参数运行的批处理脚本 (Linux)

linux - 无法覆盖到文件

shell - 抑制 hadoop fs -get -p 命令的警告