如何从多个 .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, ),获取 (grep) 所有 true 并计算它们 (-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

您是否考虑过使用awk分割线然后

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-specific-column.html

相关内容