複数の条件で行をフィルタリング

複数の条件で行をフィルタリング

3.2 GBの既存のcsvファイルから区切り文字を使用して新しいcsvファイルを作成しようとしています,。しかし、私が得る出力は0B csvファイルです。

条件は、lang = ‘en’「Corona」または「Covid」という単語を含み、20以上のverified users = Trueすべてのツイートをフィルタリングすることです。retweet_count

列名は次のとおりです。

     1  status_id
     2  user_id
     3  created_at
     4  screen_name
     5  text
     6  source
     7  reply_to_status_id
     8  reply_to_user_id
     9  reply_to_screen_name
    10  is_quote
    11  is_retweet
    12  favourites_count
    13  retweet_count
    14  country_code
    15  place_full_name
    16  place_type
    17  followers_count
    18  friends_count
    19  account_lang
    20  account_created_at
    21  verified
    22  lang

以下は私が試したコードです。

grep 'Corona' | 'Covid' > awk -F',' '$22=='en' && $13>=20 && $>21 == True {print,}' > output.csv

どんな助けでも大変感謝します。

答え1

列5がツイートテキストであると仮定すると、次のawkコマンドが役に立ちます。

awk -F',' '$5 ~ /Corona|Covid/ && $22=="en" && $13>=20 && $21=="True"' > output.csv

説明する:

  • $5 ~ /Corona|Covid/Corona:5列にORが含まれていることを確認してくださいCovid$5 ~ /[Cc]orona|[Cc]ovid/各単語の最初の文字の大文字と小文字を無視するために使用されます。
  • 他のすべての条件は理解しやすくなければなりません。
  • 結合されたブールテストは0(= false)または1(= true)と評価され、他のすべての規則はawkそれぞれ「この行を印刷しない」または「この行を印刷」として解釈されます。01{ ... }

関連情報