gpt4 book ai didi

linux - 使用 awk 计算另一个文件中模式出现的次数

转载 作者:行者123 更新时间:2023-12-03 09:47:17 24 4
gpt4 key购买 nike

我正在尝试获取一个包含列表的文件并计算该列表中的项目在目标文件中出现的次数。就像是:

list.txt
blonde
red
black

target.txt
bob blonde male
sam blonde female

desired_output.txt
blonde 2
red 0
black 0
我选择了以下代码来获取存在于 target.txt 中的值:
awk '{count[$2]++} END {for (word in count) print word, count[word]}' target.txt
但是输出不包括在 liist.txt 但不包括在 target.txt 中的所需项目
current_output.txt
blonde 2
我已经尝试了一些事情来让这个工作,包括:
awk '{word[$1]++;next;count[$2]++} END {for (word in count) print word, count[word]}' list.txt target.txt
但是,我没有成功。
任何人都可以帮助我使这个 awk 语句读取 key.txt 文件吗?对代码的任何解释也将不胜感激。
谢谢!

最佳答案

awk '
NR==FNR{a[$0]; next}
{
for(i=1; i<=NF; i++){
if ($i in a){ a[$i]++ }
}
}
END{
for(key in a){ printf "%s %d\n", key, a[key] }
}
' list.txt target.txt
  • NR==FNR{a[$0]; next}条件 NR==FNR 仅适用于第一个文件,所以
    数组的键 alist.txt 的行.
  • for(i=1; i<=NF; i++)现在对于第二个文件,这将遍历所有
    它的领域。
  • if ($i in a){ a[$i]++ }这将检查字段 $i 是否作为 key 出现
    在数组中 a .如果是,则与该键关联的值(初始为零)递增。

  • END ,我们只打印 key后跟出现次数 a[key]和一个换行符( \n )。

  • 输出:
    blonde 2
    red 0
    black 0
    笔记:
  • 因为%d , printf语句强制转换 a[key]一个整数,以防它仍然未设置。整个语句可以替换为更简单的 print key, a[key]+0 .我在写答案时错过了这一点,但现在您知道做同一件事的两种方法。 ;)
  • 在您的尝试中,出于某种原因,您只处理字段 2 ( $2 ),而忽略了其他列。
  • 关于linux - 使用 awk 计算另一个文件中模式出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64723154/

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