如何筛选目录中含特定单词次数最多的XML文件?
过滤出单词出现次数最多的XML文件
你可以基于原命令的输出,通过排序和筛选来实现需求,下面是两种场景的解决方案:
场景1:只输出单个次数最多的文件(若有多个最大值,取最后一个)
直接在原命令后追加排序和取尾行的操作:
find -name "*.xml" | xargs grep -c -H -w "word" | sort -t: -k2 -n | tail -n1
各部分作用:
sort -t: -k2 -n:以冒号:为分隔符,按第二列的次数做数字升序排序tail -n1:取排序后的最后一行,也就是次数最高的那一项
场景2:输出所有次数最多的文件(处理多个文件次数相同的情况)
如果存在多个文件的单词出现次数同为最大值,用下面的命令可以全部输出:
find -name "*.xml" | xargs grep -c -H -w "word" | awk -F: '{print $2, $0}' | sort -n | awk 'NR==1{max=$1} $1==max{print $2}'
逻辑拆解:
awk -F: '{print $2, $0}':把次数移到每行开头,输出格式变为「次数 文件名:次数」sort -n:按次数做数字升序排序awk 'NR==1{max=$1} $1==max{print $2}':先记录第一行的次数作为最大值,再输出所有次数等于最大值的原行
内容的提问来源于stack exchange,提问作者Autechre
相关产品推荐
相关产品推荐

