对命令行的新东西,但寻找一些指针。
我使用以下快速脚本来计算密钥在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
所以,我想升级它以获取存储在文本文件中的一组键名,而不是在keyname参数中单独指定它们。如果它保持单行,并保持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次的速度。
我也试过这个,我觉得这很酷:
$ cat keys.txt | xargs -0 -I keyname grep -wo keyname "filename.json" | uniq -c
但这也运行了很长时间,并没有聚合超过count = 1。
答案 0 :(得分:4)
uniq -c
计算连续次数的数量。所以,你几乎就在那里,你只需要一个sort
:
grep -wo -F -f keys.txt "filename.json" | sort | uniq -c