0

命令行的东西有点新,但正在寻找一些指针。

我使用以下快速脚本来计算密钥在 json 文件中出现的次数:

grep -wo "\"keyname\"" "filename.json" | uniq -c
1200 keyname

它工作得很好,但是当我想测试一堆键的计数时会重复......

grep -wo "\"key1\"" "filename.json" | uniq -c
1200 key1
grep -wo "\"key2\"" "filename.json" | uniq -c
1201 key2
grep -wo "\"key3\"" "filename.json" | uniq -c
1199 key3

所以,我想升级它以获取存储在文本文件中的键名数组,而不是在键名参数中单独指定它们。如果它保持单线,并且保持cat-free,那就更好了。

我不太擅长单行,所以我尝试了以下方法:

(1) 制作一个名为 testkeys.sh 的脚本:

#!/bin/bash
while read line
do
grep -wo $line "filename.json" | uniq -c
done

(2) 制作一个名为keys.txt的密钥文件

key1
key2
key3

(3) 那么

$ ./testkeys.sh keys.txt 

但是,这没有完成。

想法?

我试图找到某种方法将 keys.txt 的行变成变量以进入 grep 中的循环语句,但没有成功。所需的输出将是...

$ magic? | grep -wo $vars "filename.json" | uniq -c
1200 key1
1202 key2
1199 key3

更新

我知道 grep 可以使用 -f 标志将模式文件作为参数,但这似乎仍然需要以我不理解的方式对脚本进行重大更改。所以,例如...

正在尝试转换...

grep -wo "\"keyname\"" "filename.json" | uniq -c

进入...

grep -wo -F -f keys.txt "filename.json" | uniq -c

生产

1 key1
1 key2
1 key1
1 key2
1 key1
1 key2

……好几次。它还比每个单独执行 n 次的速度花费 /much/ 更长的时间。

我也试过这个,我认为这很酷:

$ cat keys.txt | xargs -0 -I keyname grep -wo keyname "filename.json" | uniq -c

但这也运行了很长时间,并且没有聚合超过 count = 1。

4

1 回答 1

4

uniq -c计算连续出现的次数。所以,你快到了,你只需要一个sort

grep -wo -F -f keys.txt "filename.json" | sort | uniq -c
于 2013-03-26T17:17:40.517 回答