私のデスクトップの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
、以前に定義した変数を使用します。
grep
4) -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
仮定:
これ急性呼吸器疾患常に同じ列にある(例では列3)
このディレクトリの
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