Linux搜索零列2

Linux搜索零列2,linux,search,awk,Linux,Search,Awk,我一直在尝试使用grep和find的不同组合,当这两列中的第二列wind speed.csv files==“0.0”时,首先打印文件名,然后打印实例或整行。我需要从工作目录中递归搜索。我用grep和find在下面尝试了这些解决方案,但它没有返回任何结果,事实上,我知道在工作目录和子目录中的一些.csv文件中存在这种情况 非常感谢,我花了一些时间,我知道这很容易 grep -Rx --include "*SPD-daily.csv" 0.0 . find . -name "*SPD-daily.

我一直在尝试使用
grep
find
的不同组合,当这两列中的第二列wind speed.csv files==“0.0”时,首先打印文件名,然后打印实例或整行。我需要从工作目录中递归搜索。我用grep和find在下面尝试了这些解决方案,但它没有返回任何结果,事实上,我知道在工作目录和子目录中的一些.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

将数据保存到sample.csv中

awk -F, '($2==0){print $0, FILENAME, FNR}' sample.csv        
01/04/1991, 0.0 sample.csv 4
  • 使用逗号作为分隔符
    -F,
  • 检查第2列是否等于零r
    $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}'

将数据保存到sample.csv中

awk -F, '($2==0){print $0, FILENAME, FNR}' sample.csv        
01/04/1991, 0.0 sample.csv 4
  • 使用逗号作为分隔符
    -F,
  • 检查第2列是否等于零r
    $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}'

它将搜索当前工作目录中的所有
*SPD daily.csv
文件,并将检查每个文件的第二列,如果第二列值为零,则它将打印
文件名
行号(FNR)
对应的行/记录($0)

若要停止在文件中搜索,当您在第二列中找到第一个零时,您可以将
退出

find -name "*SPD-daily.csv" -exec awk -F, '$2==0{print FILENAME,FNR,$0;exit}' {} \;

它将搜索当前工作目录中的所有
*SPD daily.csv
文件,并将检查每个文件的第二列,如果第二列值为零,则它将打印
文件名
行号(FNR)
对应的行/记录($0)

若要停止在文件中搜索,当您在第二列中找到第一个零时,您可以将
退出

find -name "*SPD-daily.csv" -exec awk -F, '$2==0{print FILENAME,FNR,$0;exit}' {} \;

如果有可能要筛选接近零但不完全是
$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

如果有可能要筛选接近零但不完全是
$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

你要找的是这样的东西吗

awk '$NF ~ /0.0/{print $2}' file
0.0

你要找的是这样的东西吗

awk '$NF ~ /0.0/{print $2}' file
0.0

工作完美-谢谢!似乎我不必在第二列中告诉awk 0.0的确切值,因为我尝试过的任何一种方法都可以使用“0”。再次感谢,工作完美-谢谢!似乎我不必在第二列中告诉awk 0.0的确切值,因为我尝试过的任何一种方法都可以使用“0”。再次感谢,