私はシェルコマンドを初めて使用します。 CSVデータセットfbnews.csvに基づいて、この問題は少し混乱しています。
CSV データセットは次のとおりです。
D,E,F, message, score, A,B,C, ID
d,e,f, Let's read a book, 24, a,b,c, 1
j,k,l, Read this book, 39, d,e,f, 2
m,n,o, Have you read this book?, 15, g,h,i, 3
これは単なる例です。元のデータセットには20,000,000行と20列が含まれています。
このデータセットから
- 「read」という単語が含まれ、スコアが20より大きい行を探します。 2.この行では、スコア値に基づいてソートされたスコアとID列のみを印刷します。
- これらのソートされた列をテキストファイルに保存します。
予想される出力は次のとおりです。
Score ID
24 1
39 2
シェルコマンドを使用してこれをどのように実行できますか?
ベストアンサー1
ミラーの使用(https://github.com/johnkerl/miller)と
D,E,F,message,score,A,B,C,ID
d,e,f,Let's read a book,24,a,b,c,1
j,k,l,Read this book,39,d,e,f,2
m,n,o,Have you read this book?,15,g,h,i,3
そして走っている
mlr --csv filter -S '$message=~"(r|R)ead" && $score>20' then cut -f score,ID input.csv >output.csv
あなたはやる
score,ID
24,1
39,2
コマンドに関するいくつかの詳細は次のとおりです。
--csv
、入力および出力フォーマットの設定filter -S '$message=~"(r|R)ead" && $score>20'
フィルタを適用cut -f score,ID
あなたの分野を選択してください
ヘッダー列よりもセルが多い誤ったCSVがある場合
D,E,F,message,score,A,B,C,ID
d,e,f,Let's read a book,24,a,b,c,1
j,k,l,Read this book,39,d,e,f,2,a wrong cell,another wrong cell
m,n,o,Have you read this book?,15,g,h,i,3
ragged
オプションを適用して実行できます
mlr --csv --ragged unsparsify then filter -S '$message=~"(r|R)ead" && $score>20' then cut -f score,ID input.csv>output.csv
ただし、CSVに問題がある場合は、ここで内容全体を共有することをお勧めします。