感谢迄今为止帮助过我的任何人,这是我的问题:我有一个包含825个文件的文件夹。在这些文件中是酒店的评论。其中一个文件的示例名称为hotel_72572.dat
,此文件基本上包含以下内容:
<Overall Rating>4
<Avg. Price>$173
<URL>http://www.tripadvisor.com/ShowUserReviews-g60878-d72572-r23327047-Best_Western_Pioneer_Square_Hotel-Seattle_Washington.html
<Author>everywhereman2
<Content>Old seattle...
<Date>Jan 6, 2009
<img src="http://cdn.tripadvisor.com/img2/new.gif" alt="New"/>
<No. Reader>-1
<No. Helpful>-1
<Overall>5
<Value>5
<Rooms>5
<Location>5
<Cleanliness>5
<Check in / front desk>5
<Service>5
<Business service>5
<Author> //repeats the fields again, each cluster of fields is a review
然后将字段(第6行 - <Business service>
)重复n次,其中n是文件中的评论数。我认为通过计算每个文件出现“作者”的次数可以实现这一目标,但也许有更好的解决方案?
我正在尝试编写一个名为countreviews.sh的脚本,它将计算我文件夹中每个文件的评论数(文件夹名称为reviews_folder),然后将每个文件的编号从最高到最低排序。示例输出将是:
hotel_72572 45
hotel_72579 33
hotel_73727 17
其中前缀是文件的名称,数字是每个文件的评论数。我的脚本必须将文件夹名称作为参数。例如,我会输入./countreviews.sh reviews_folder并获得我的输出。
在过去的几天里,我收到了很多不同的建议,但有很多不同的建议,但都没有达到我想要做的(由于解释不好而导致的错误),我希望这最终能够清楚地解释清楚。再次感谢在过去几天帮助过我的任何人,以及我为这个问题提供的任何帮助。
答案 0 :(得分:3)
grep -c Author hotel_*.dat | sort -t : -k2nr | sed 's/\.dat:/ /'
输出(例如):
hotel_72572 45 hotel_72579 33 hotel_73727 17
<强>更新强>
#!/bin/bash
cd "$1" || exit 1
grep -c Author hotel_*.dat | sort -t : -k2nr | sed 's/\.dat:/ /'