命令行的东西有点新,但正在寻找一些指针。
我使用以下快速脚本来计算密钥在 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。