我的桌面上名为 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
之前定义的变量。
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
您是否考虑过使用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