我目前正在使用
$ awk 'NR==FNR{a[$1];next} ($3 in a)' find.txt path_to_100_files/*
它使用 find.txt 字符串在 path_to_100_files/ 中搜索多个文件以查找匹配项。
find.txt 包含
[email protected]
[email protected]
然后 path_to_100_files/ 包含文件,例如
0.0.0.0:002921931:[email protected]
123.0.0.1:00029382:[email protected]
现在它所做的只是在第三列中搜索 find.txt 中的字符串,但我需要它来搜索整个文件/每一列?
因为某些文件可能有 5 列长,或 9 列长,例如,
0.0.0.0:002921931:1111111:[email protected]
123.0.0.1:00029382:1111111:11111:[email protected]
我尝试将 (a 中的 $3) 更改为 (a 中的 $0-$9) 但似乎不起作用?
答案1
为什么要一一搜索字段?为什么不一次搜索整行呢?
grep -f find.txt path_to_100_files/*
答案2
如果电子邮件是 100 个文件中的最后一个字段,请使用:
awk -F: 'NR==FNR{a[$1];next} ($NF in a)' find.txt path_to_100_files/*
如果您必须查看每个字段,则需要一个循环:
awk -F: 'NR==FNR{a[$1];next} {for (i=1;i<=NF;i++) {if ($i in a) {print;break}}} find.txt path_to_100_files/*
但更简单的调用是使用 grep:
grep -oFf find.txt path_to_100_files/*
答案3
首先使用以下命令查找文件中存在的最大列并从中获取最大值
k=`awk -F ":" '{print NF}' path_to_100_files/* | sort -nr | head -1`
使用 for 循环来检查每一列
for ((i=0;i<=$k;i++)); do awk -v i="$i" -F ":" 'NR==FNR {a[$1];next}($i in a) {print }’ find.txt path_to_100_files/* ; done