我对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 #