我在bash脚本中使用以下loc来返回唯一的grep结果字符串及其计数:
hitStrings="$(eval 'find "$DIR" -type f -print0 | xargs -0 grep -roh "\w*$searchWord\w*"' | sort | uniq -c)"
例如,如果我有一个$ searchWord"你",我可以得到以下结果:
5 Kougyou 2 Layout 10 layouts 2330 you 859 your 17 yourself
我的问题是:
由于
答案 0 :(得分:2)
你有太多不必要的图层,你可以用
实现同样的目标$ grep -roh "\w*$key\w*" | sort | uniq -c > counts
和
$ declare -A counts; while read -r v k; do counts[$k]=$v; done < counts
$ echo ${counts["you"]}
请注意,取决于使用情况,您可能会因文件本身而逃脱。再次搜索&#34;你&#34;从文件中计算
$ awk -v key="you" '$2==key{print $1}' counts
如果相同的名称混淆您更改其中一个,或通过替换完全删除临时文件。
$ declare -A counts
$ while read -r v k; do counts[$k]=$v; done < <(grep -roh "\w*$key\w*" | sort | uniq -c)
或与邪恶的eval
你可以做
$ eval declare -A counts=( $(grep -roh "\w*$key\w*" | sort | uniq -c | awk '{print "["$2"]="$1}') )
但为什么呢? while循环是一个非常好的解决方案。