打印文件名和排序数据

时间:2019-02-11 10:24:58

标签: bash

我有一个脚本,可以根据文件中找到的某个单词的出现次数对目录中的文件进行排序。我想在文件的名称前面显示排序列表。我可以循环搜索文件以进行排序和显示,并且可以分别修剪路径名以获取文件名,但是我不确定如何将输出作为文件名,然后将其排序通过。我可以使用awk正确设置格式,因为我可以在数字前面打印一个字符串,只是不确定是否要获取文件名。

我现在拥有的是:

path="/home/Downloads/folder/*"
trim_path=$(echo a | sed -r "s/.+\/(.+)\../\1/")

(for f in $a
do
    tr -s ' ' '\n' < $f | grep -c 'Word'
done
) | sort -g | awk '{print $b, $1}'

输出为

300 300
302 302
304 304
... ...

我认为我的trim_path变量可能以错误的方式进行操作,我想我只是想以某种方式从排序后的数据中提取路径,但我不确定。

1 个答案:

答案 0 :(得分:0)

我不确定tr/grep是计算文件中单词的最佳方法... 回答你的问题。 您可以使用basename命令仅获取文件名。不需要该trim_path变量。您可以使用sort -k参数对第二个命令进行排序。因此无需使用awk。所以可能是这样的:

path="/home/Downloads/folder/*"
for i in $path; do 
    echo `basename $i` `tr -s ' ' '\n' < $i | grep -c 'Word'`; 
done |sort -g -k 2