使用 shell 查找列中每个项目的频率



我对shell/mac终端缺乏经验,所以任何帮助或建议将不胜感激。

我有一组非常大的数据,带有制表符分隔符。下面是代码外观的示例。

0001    User1    Tweet1
0002    User2    Tweet2
0003    User3    Tweet3
0004    User2    Tweet4
0005    User2    Tweet5

我一直在尝试将每个唯一用户的列表导出为 csv 以及他们出现/发布推文的次数。

这是我目前对代码的尝试:

cut -f 2 Twitter_Data_1 |sort | uniq -c | wc -l > TweetFreq.csv

理想情况下,我希望导出如下所示的csv:

User1    1
User2    3
User3    1
$ awk -F 't' '{ print $2 }' tweet | sort | uniq -c

输出:

  1 User1
  3 User2
  1 User3

不是最干净的,但它有效

#!/bin/bash
mkdir tmptweet # Creation of the temp directory
while read line; do
user=`echo $line | cut -d " " -f 2` # we access the username
echo $line >> tmptweet/$user # add a line to the selected user's counter
done < Twitter_Data_1
for file in tmptweet/*; do
i=`cat $file | wc -l` # we check the lines for each user ...
echo "${file##*/} $i" >> TweetFreq.csv # ... and put this into the final file
done
rm -rf tmptweet # remove of the temp directory

带有临时文件的临时目录用于存储值,比玩弄Array更容易。

Twitter_Data_1的每一行都插入到以用户名命名的文件中,然后计算每个文件中的行数以创建TweetFreq.csv文件

测试:

Will /home/will # ls
script.sh     Twitter_Data_1
Will /home/will # ./script.sh
Will /home/will # ls
script.sh     Twitter_Data_1     TweetFreq.csv
Will /home/will # cat TweetFreq.csv
User1        1
User2        3
User3        1
Will /home/will #

最新更新