5つのcsvファイルを含むフォルダ内の単語を一致させようとするために使用するUnited States
コマンドは、行に単一のエントリがあることを確認します。また、一致する文字列に基づいて他の2つの列を合計したいと思います。
awk -F "," '{if (/United States/) sum_1 += $2;sum_2 += $3} END {print sum_1, sum_2}' Files/*.csv
はい、連続して複数回発生するかどうかを確認しますawk
。
したがって、米国に関連する行が2回表示される場合は、次のように表示する必要があります。
2
awk '/United States/{x++;}END{print x}' Files/*csv
サンプルファイル
United States,1,2,3
Donald TRump,1,2,3
United States,1,2,3,United States
答え1
awk '/United States/ {i++} END {print i}' RS=",|\n" Files/*.csv
RS
- デフォルトでは、改行に設定されているレコード区切り文字を入力します。
答え2
アッ
文字列関数を使用できますグリッド、行ごとの置換回数を返します。これは各行の発生回数を計算する便利な方法であり、すべての行に対してこれを行うことができるため、すべての行の数を計算できます。
awk '{cnt += gsub(/United States/,"&")} END {print cnt}' *.csv
awkスクリプトでこのチェックを使用するには(以下の例のように)、次の構文を使用できます。
awk '{ if (gsub(/pattern/"&")) {"do stuff here"} }' file
または
awk '{x = gsub(/pattern/"&"); "do stuff with x here"; }' file
grep
また、を使用すると、grep
出力-o
で一致する項目ごとに1行を取得し、出力行数が結果です。
grep -o "United States" *.csv | wc -l
答え3
あなたが提供したサンプル入力ファイルを考えると、@nezabudkaの答えは次のようになります。
awk 'BEGIN {RS=",|\n"} /United States/ {i++} END {print i}' inputFile
そうだね。これにより、次の質問が表示されます。サンプル入力ファイルがすべてのフィールド区切り文字を表すことは確実ですか?それ以外の場合は、次のような入力ファイルの状況を可能にする代替ソリューションがあります。
> cat inputFile
United States,1,2,3
Donald TRump,1,2,3 United States blih blah \!?# bluh United States
United States,1,2,3,United States
> awk 'BEGIN {RS=",|\n| "}
/United/ {rec=NR; next}
/States/ && NR==rec+1 {i++}
END {print i}' inputFile
5
答え4
注文する
#/bin/bash
awk '{print gsub("United States",$0)}' filename| awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'