私のデスクトップの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ループを使用します。