我一直尝试使用grep
和find
的不同组合首先打印文件名,然后在这两列风速.csv文件的第二列==时打开实例或整行“0.0”。我需要从工作目录中递归搜索。我已经用grep尝试了这些解决方案并在下面找到但是它并没有返回任何东西,事实上,我知道在工作目录和子目录中的某些.csv文件中存在这种情况。
非常感谢 - 我花了一些时间,我知道这很容易。
grep -Rx --include "*SPD-daily.csv" 0.0 .
find . -name "*SPD-daily.csv" | xargs grep -i "0.0"
我的数据如下:
01/01/1991, 3.804
01/02/1991, 2.788
01/03/1991, 4.521
01/04/1991, 0.0
答案 0 :(得分:0)
将您的数据保存到sample.csv
awk -F, '($2==0){print $0, FILENAME, FNR}' sample.csv
01/04/1991, 0.0 sample.csv 4
-F,
$2==0
print $0, FILENAME, FNR
我将相同的数据放入sample.csv和sample2.csv并运行
find sample* | xargs awk -F, '($2==0){print $0, FILENAME, FNR}'
输出符合预期:
01/04/1991, 0.0 sample.csv 4
01/04/1991, 0.0 sample2.csv 4
在您的情况下,结合您的grep
和find
命令(我没有测试您的命令,假设它们有效),它将是:
grep -Rx --include "*SPD-daily.csv" 0.0 . find . -name "*SPD-daily.csv" |xargs awk -F, '($2==0){print $0, FILENAME, FNR}'
答案 1 :(得分:0)
它会搜索当前工作目录中的所有*SPD-daily.csv
个文件,并会检查每个文件的第二列,如果第二列值为零则会打印FILENAME
,line number (FNR)
和{ {1}}。
corresponding line/record ($0)
如果你想在文件中停止搜索,当你在第二列中找到第一个零时,你可以放find -name "*SPD-daily.csv" -exec awk -F, '$2==0{print FILENAME,FNR,$0}' {} \;
exit
答案 2 :(得分:0)
如果您希望过滤关闭为零而非完全 $2==0.0
的值,则可以使用绝对值和公差:
$ echo "01/01/1991, 3.804
> 01/02/1991, 2.788
> 01/03/1991, 4.521
> 01/04/1991, 0.0
> 01/04/1991, 0.001" >file
awk -F, -v tol=1e-5 'sqrt(($2-tol)^2)<=tol {print FILENAME, $0}' file
file 01/04/1991, 0.0
file 01/04/1991, 0.001
如果您只是在完全 0.0
上进行过滤,则可以执行以下操作:
$ awk '!$2' file
01/04/1991, 0.0
答案 3 :(得分:0)
你正在寻找这样的东西吗?
awk '$NF ~ /0.0/{print $2}' file
0.0