いくつかのパラメータを受け取り、これらのパラメータに基づいて特定のcsvファイルのデータをフィルタリングするawkスクリプトがあります。
2つの出力があります:
- まず、パラメータに一致するすべてのレコードを含む.csvファイルを作成します。
- 次に、レコード名を参照する$ 2フィールドのみを印刷します。ただし、これは20レコードのランダムなサブセットでなければなりません。
これまで私はこれをしました:
私は次のようにスクリプトを呼び出します。./Script.awk ARG1=20 ARG2="AAA" ARG3=1900 data.csv
#! /usr/bin/awk -f
# Define FS
BEGIN {FS=OFS = ","}
$4 > ARG1 && $8 == ARG2 && $20 > ARG3 { print > "filtered_data.csv" ; print $2 }
だから、フィルタリングされたデータファイルを正しく生成して$2を印刷しますが、レコードが多いので、任意のサブセットのみを印刷したいと思います。。では、どうすればいいのかご存知ですか?
ありがとうございます! !
答え1
#!/usr/bin/env bash
out='filtered_data.csv'
awk -F, '$4 > ARG1 && $8 == ARG2 && $20 > ARG3' "$@" > "$out" &&
cut -d, -f2 "$out" | shuf -n20
ただし、ARG1などの代わりに意味のある変数名を選択してください。
答え2
編集する:私はこれをEd Mortonの答えの前に投稿しましたが、これは明らかに良いです。
他の人に役立つかどうかここに残しておきます。
まあ、実際にはかなり簡単です...誰かが必要な場合に備えて、私が直接答えてくれます! ジョブスクリプトが期待どおりに動作します。
#! /usr/bin/awk -f
# Define FS
BEGIN {FS=OFS = ","}
$4 > ARG1 && $8 == ARG2 && $20 > ARG3 { print > "filtered_data.csv" ; print $2 | "shuf -n20"}
パイプだけでいい「スープ-n20」印刷があります:)