21列のCSVファイルがあります。 2つの列から文字列を検索してから、発生の総数を計算したいと思います。
マイデータセットのサンプル
columnA columnB columnC columnD
abc Apple Apple today
nbd apple NULL tomorrow
ccc apple Apple today
ファイルから文字列を検索できます。しかし、2つの列でのみ文字列を検索したいと思います。私の検索は大文字と小文字を区別します(正確に一致)。
awk -F',' '/Apple/ {++count} END{print count}' Dataset.csv
列Bと列C($ 2&&$ 3)に検索を適用したいです。出力は3でなければなりません。
どんなヒントでも役に立ちます。ありがとう
答え1
awk -F',' '$2 ~ /^Apple$/ {++count} $3 ~ /^Apple$/ {++count} END{print count}' Dataset.csv
または正確な一致が必要な場合は、==
次の操作を行います~
。
awk -F',' '$2 == "Apple" {++count} $3 == "Apple" {++count} END{print count}' Dataset.csv
count
で見つかったら追加されます。誰でも $2
または$3
。
count
両方で見つかった場合にのみ増やすには、次のようにします。
awk -F',' '$2 ~ /^Apple$/ && $3 ~ /^Apple$/ {++count} END{print count}' Dataset.csv
awk -F',' '$2 == "Apple" && $3 == "Apple" {++count} END{print count}' Dataset.csv
または(AND文字列x 2と一致するように2つのフィールドを連結):
awk -F',' '$2$3 ~ /^AppleApple$/ {++count} END{print count}' Dataset.csv
awk -F',' '$2$3 == "AppleApple" {++count} END{print count}' Dataset.csv
答え2
awk を使用してフィールド区切り文字を検索モードに設定します。
awk -F'Apple' '{count+=NF-1}END{print count}' file
このcount
変数はフィールド数だけ増加し、ファイルの末尾に印刷されます。
RSを正規表現として使用する必要があるGNU awkを使用する代替(単語の境界、@cas監査):
awk -v RS='\\<Apple\\>' 'END{print NR-1}' file
NR
これは、ファイルで見つかったレコード数を確認するだけです。