我有一个带有以下各列的csv:
status_id,user_id,created_at,屏幕名称,文本,源,reply_to_status_id,reply_to_user_id,reply_to_screen_name,is_quote,is_retweet,收藏夹数量,retweet_count,国家/地区代码,全名,place_type,followers_count,friends_count,account_lang,account_created_at,verified,lang
这是我要回答的问题:
使用lang = zh_过滤所有tweet,其中包含术语“ Corona”或“ Covid”。将推文导出到名为“ covid19Final.csv”的新文件。确保限制只向转发至少20次的经过验证的用户发推文。确保文件“ covid19Final.csv”也包含列名。
1:
sort -k 2 -t , -n processed-covid-data.csv >> sorted_process_covind.csv
2:
awk -F ',' '{ OFS=","; if ($2 == prev) {offset++} else offset=1; print (offset","$2","$5","$22); prev=$2}' sorted_process_covind.csv | awk '$1>=20' > again_valid_tweets.csv
if control does'nt come out in half an hr or 1 hr press CTRL +C
3:
awk -F ',' '$4 =="en" { print $3} ' again_valid_tweets.csv | grep -e "Covid" -e "Corona" >covid19Final.csv
我的第三行返回一个空CSV。帮助!
verified
实际上包含
),retweet_count
($13
)是否大于或等于20
,最后如果记录包含"Corona"
或"Covid"
,则将记录输出到新文件。有两种方法可以解决此问题。第一个仅与记录匹配,然后使用Shell重定向到新文件(首选):
awk -F, 'FNR==1 || ($NF=="en" && $(NF-1)=="true" && $13>=20 && $0~/Corona|Covid/)' input_file.csv > covid19Final.csv
print
输出从input_file.csv
读取的记录,然后将结果直接重定向到新文件covid19Final.csv
。第二种方法(实际上是等效的)是使用第一行条件或匹配的条件条件分别编写两个规则,以便将输出重定向到规则本身内的新文件中,例如awk -F, '
FNR==1 {
print $0 > "covid19Final.csv"
}
$NF=="en" && $(NF-1)=="true" && $13>=20 && $0~/Corona|Covid/ {
print $0 > "covid19Final.csv"
}
' input_file.csv
这里的好处是更易于阅读。[记住,您还没有发布'verified
contains, so if the indication for
verifiedis something other than
true / false, you need to adjust that test to match your data. The same goes for
retweet_count`。
让我知道是否还有其他问题。