Linux 搜索模式bash变量到awk

Linux 搜索模式bash变量到awk,linux,bash,awk,Linux,Bash,Awk,早上好 我一直在开发一个脚本,用于在Linux系统上进行某些搜索/比较/检索数据。 特别是,我试图交叉的是脚本先前创建的2个文件中的数据,其中包含以下示例文本: file_1: /dev/abcde_vg/abcde_lv APP /bbdd_abcde /dev/abcde_vg/system_lv APP /bbdd_abcde/system

早上好

我一直在开发一个脚本,用于在Linux系统上进行某些搜索/比较/检索数据。 特别是,我试图交叉的是脚本先前创建的2个文件中的数据,其中包含以下示例文本:

file_1:

/dev/abcde_vg/abcde_lv            APP     /bbdd_abcde                          
/dev/abcde_vg/system_lv           APP     /bbdd_abcde/system                   
/dev/abcde_vg/data_lv             DAT     /bbdd_abcde/data      

file_2:              

/bbdd_abcde         APP 
/bbdd_abcde/system      APP 
/bbdd_abcde/data            DAT
这里的目标是使用awk获得文件2第一列的列表:

for i in `cat file_2|awk '{print $1}'
do ..........;done
并获得类似于以下声明的内容:

awk '$3 ~ "^/bbdd_abcde$"{print $0}' file_1
/dev/abcde_vg/abcde_lv            APP     /bbdd_abcde  
我尝试了以下方法,但没有成功:

for i in `cat file_2|awk '{print $2}'
do
awk -v VAR1="$i" '$3 ~ VAR1{print $0}' (or awk -v VAR1="$i" '$3 ~ "^VAR1$"{print $0}' or similars)
done
     
一事无成

感谢您的回答,最后我使用AWK搜索了一个精确匹配:

美元中的i的
(cat文件_2 | awk'{print$2}')
做
awk-v VAR1=“$i”'$3==VAR1{print$0}”
完成
这背后的想法更复杂,问题本身是仅使用bash跨越数据的200多个脚本的一部分

该脚本在每台服务器上生成一个文件,格式如前面所述

/dev/abcde_vg/abcde_lv            APP     /bbdd_abcde                          
/dev/abcde_vg/system_lv           APP     /bbdd_abcde/system                   
/dev/abcde_vg/data_lv             DAT     /bbdd_abcde/data  
这些文件与NAS上的“应如何”文件进行核对,格式如下:

/bbdd_          APP 
/bbdd_/system       APP 
/bbdd_/data                 DAT
验证分配给lv的磁盘“类型”是否正确。(磁盘类型在脚本的另一部分中确定)

因此,我们的目标是将每个装载点磁盘类型“APP/DAT…”与“应该如何”中的相同磁盘类型进行比较

对我来说,主要的问题是在一个带有awk和“~”的文件上搜索一个特定的挂载点,比如“/bbdd_abcde”,我得到了很多结果,而不仅仅是确切的结果。 我需要在awk语句中使用“==”


感谢您的帮助

我希望我正确理解了您的问题,请尝试以下方法:

awk 'NR==FNR{a[$1]=7;next}a[$3]' file2 file1
请注意,此行与代码之间存在差异。在我的队伍中,我没有做正则表达式匹配。因为如果您阅读
/bbdd\u abcde
,使用正则表达式匹配检查文件中的所有行1将匹配。我不知道这是否是意料之中的


如果需要匹配,您可以更改代码的第二部分。

此解决方案将交叉引用键(应用程序、数据)从文件1读取到数组中,然后使用文件2打印匹配项

awk 'FNR==NR{a[$2]=$1;next} $2 in a' file2 file1

感谢您的回答,我的错误是使用“~”而不是“=”,因此搜索模式是“精确”的,而不是像我所做的那样“包含”。再次感谢您的帮助,我将为主要问题添加完整答案。这不是工作原理,请从您的问题中删除[已解决]部分,并将该部分作为自我回答。Muchas gracias por escucharme。