Bash shell过滤

问题描述 投票:0回答:1

我有一个带有以下各列的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。帮助!

bash shell csv unix bigdata
1个回答
0
投票
调整任何内容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

这里的好处是更易于阅读。

[记住,您还没有发布'verifiedcontains, so if the indication forverifiedis something other thantrue / false, you need to adjust that test to match your data. The same goes forretweet_count`。

让我知道是否还有其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.