gpt4 book ai didi

linux - 搜索模式 bash 变量到 awk

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:31 24 4
gpt4 key购买 nike

早上好

我一直在开发一个脚本来在 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 的精确匹配搜索:

for i in $(cat file_2|awk '{print $2}')
do
awk -v VAR1="$i" '$3 == VAR1{print $0}'
done

这背后的想法更复杂,问题本身是仅使用 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_abcde,使用正则表达式匹配检查 file1 中的所有行都会匹配。我不知道是否符合预期。

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

关于linux - 搜索模式 bash 变量到 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com