gpt4 book ai didi

awk 以模式为索引的关联数组

转载 作者:行者123 更新时间:2023-12-04 13:39:50 25 4
gpt4 key购买 nike

让 awk 存储搜索模式以及它在数组中找到的行的最佳解决方案是什么。我需要一个 shell 脚本吗,还是仅使用 awk 就可以完成。

例如,如果我搜索单词“guitar”,它会生成一个数组,其中包含例如在第 13、18 和 89 行找到该单词的信息?

awk '/home/ {
array[$0] = NR
}
END {
for(i in array) print i, array[i] }' 1-1000.txt

例如,这将打印与找到它们的数字匹配的行..但我不需要 $0 而是那个'home'模式,作为关联数组的索引,它将行作为值保存..但又是问题如何为该索引设置多个值??

最佳答案

重要的是要知道 是唯一的。因此,如果您打算将搜索模式存储为键并将行号存储为值,那么值将被看到该模式的最后一行覆盖。

一个好的方法是:

awk '{a[NR]=$1} END {for (k in a) if(a[k]=="monkey") print k}' textile

输出:

[jaypal:~] cat textfile
monkey
donkey
apple
monkey
dog
cat
mat
horse
monkey
[jaypal:~] awk '{a[NR]=$1} END {for (k in a) if(a[k]=="monkey") print k}' textfile
4
9
1

如果您需要遍历行以查找特定模式并将其存储,那么您可以使用 for 循环 检查行中的每个单词,一旦找到您的单词,就将其存储为大批。

awk '{ for (i=1;i<=NF;i++) if($i=="pattern") arry[NR]=$i } END {. . .}' inputfile

根据评论更新:

迭代两个文件(其中一个用作查找,第二个用于搜索匹配查找的行)。

awk 'NR==FNR{a[NR]=$1; next} {for (x in a) if ($0 ~ a[x]) print $0 " found because of --> " a[x]}' textile text2

测试:

[jaypal:~] cat text2
monkeydeal
nodeal
apple is a good fruit

[jaypal:~] awk 'NR==FNR{a[NR]=$1; next} { for (x in a) if ($0 ~ a[x]) print $0 " found on line number " FNR " because of --> " a[x]}' textfile text2
it is a good monkeydeal found on line number 1 because of --> monkey
it is a good monkeydeal found on line number 1 because of --> monkey
it is a good monkeydeal found on line number 1 because of --> monkey
apple is a good fruit found on line number 3 because of --> apple

关于awk 以模式为索引的关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16888944/

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