gpt4 book ai didi

bash - Linux : Search for coincidences in four different files

转载 作者:行者123 更新时间:2023-11-29 09:40:29 25 4
gpt4 key购买 nike

场景:四个文件,每个文件有 300 行。我想知道所有四个文件中的哪些行仅使用 bash(请不要使用 perl/python/ruby)

快速示例

$cat bad_domains.urlvoidabcde$cat bad_domains.alienvaultfgach$cat bad_domains.hphostsijkah$cat bad_domains.malwaredomainlbmfaj

I only want to match the "a" i tried with stuff like this but it's slow as hell:

for void in $(cat bad_domains.urlvoid)
do
for vault in $(cat bad_domains.alienvault)
do
for hphosts in $(cat bad_domains.hphosts)
do
for malwaredomain in $(cat bad_domains.malwaredomain)
do
if [ $void == $vault -a $void == $hphosts -a $void == $malwaredomain -a $vault == $hphosts -a $vault == $malwaredomain -a $hphosts == $malwaredomain ]
then
echo $void
fi
done
done
done
done

优化我的代码有什么好的技巧吗?我读了一些关于二分法搜索的内容,可能有用。

最佳答案

使用 comm:

comm -12 <(awk 'FNR==NR{a[$0];next} $0 in a' f1 f2) <(awk 'FNR==NR{a[$0];next} $0 in a' f3 f4)
a

这三个步骤有效:

  1. 从file1和file2中获取常用字符串
  2. 从file3和file4中获取常用字符串
  3. 通过以上2步得到公共(public)字符串,得到4组的交集

编辑: 纯 awk 解决方案:

awk 'FNR==NR{a[$0];next} $0 in a' <(awk 'FNR==NR{a[$0];next} $0 in a' f1 f2) <(awk 'FNR==NR{a[$0];next} $0 in a' f3 f4)

关于bash - Linux : Search for coincidences in four different files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22759252/

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