複数の.csvファイルから文字列を見つける方法

複数の.csvファイルから文字列を見つける方法

私のデスクトップのHWというフォルダに複数の.csvファイルがあり、cygwinを使用しており、特定の列で文字列を検索したいと思います。たとえば、X列では、ARDはコンテンツ値のヘッダーであり、trueまたはfalse、ARD = trueの数を探したいとします。

助けてください...

答え1

キーワードが常に同じ列(列番号2など)にある場合は簡単です。

cut -d, -f 2 file(s) | grep -c 'true'

つまり、列2を切り取り(-f 2)、 "、"をフィールド区切り文字として使用し(-d、)、すべてのtrueを取得し(grep)カウントを計算します(-c)。

もっと複雑にするには、「ARD」列を検索する必要がある場合

awk  'BEGIN {FS = ","}  ; FNR == 1 { for ( i=1 ; i<=NF ; i++ ) { if ( $i=="ARD" ) { col=i } } } ; FNR >= 2 { print $col }' file(s) | grep -c 'true' 

1)BEGIN { FS = "," }各ジョブ(BEGIN)の前にカンマを","フィールド区切り記号(FS=)として使用します。

2)ファイルの最初の行(つまり、ヘッダー行)の場合(FNR == 1)すべての列に対して(for ( i=1 ; i<=NF ; i++ ))文字列 "ARD"がこの列にあることを確認します(if ( $i=="ARD"))。その場合は、変数をcol列番号に設定します。{ col=i }

3)これで列番号がわかったので、ファイルの最初の行(=ヘッダー)(つまり、2より大きいすべての行)を省略してその列を印刷しますFNR >= 2 { print $col }。ここではcol、以前に定義した変数を使用します。

grep4) -c"true" 発生回数を ( ) カウントしてパイプ出力

5)ファイル別リストの場合は、bashスクリプトでforループを使用します。

答え2

3つのファイルがあるとしましょう。

new.csv

Col1,Col2,ARD,Col4
1,2,true,3
1,2,true,3
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3

new1.csv:

Col1,Col2,ARD,Col4
1,2,true,3
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3

new2.csv:

Col1,Col2,ARD,Col4
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3

する:

awk -F',' '{print $3}' *.csv | grep -c true

出力:

6

仮定:

  1. これ急性呼吸器疾患常に同じ列にある(例では列3)

  2. このディレクトリのgrepすべてのファイルを参照しますか?*.csv

答え3

使用を検討しましたか?アッその後、区切り線

grep TRUE | wc -l

結果を計算するには?

答え4

grepを再帰的に使用して、ディレクトリ内のすべてを見つけることができます

cd /path/to/dir/*
grep -r "ARD"

または単に

grep -r -l "ARD" /path/to/dir/*

源泉: http://www.cyberciti.biz/faq/howto-recursively-search-all-files-for-words/

awkを使用してcsvファイルを検索することもできます。例:

awk -F, '$X == ARD' HW

Xは列番号を表し、ARDはキーワード、HWは上記のcsvファイルを表します。

源泉:https://stackoverflow.com/questions/2373885/searching-a-csv-file-using-grep

これは別のオプションとしても利用可能です

grep '^\([^|]*|\)\{X\}ARD|' HW

源泉:http://www.unix.com/unix-for-dummies-questions-and-answers/123978-grepping-特異的-column.html

関連情報