Linux搜索零列2

时间:2017-02-27 19:14:28

标签: linux search awk

我一直尝试使用grepfind的不同组合首先打印文件名,然后在这两列风速.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

4 个答案:

答案 0 :(得分:0)

将您的数据保存到sample.csv

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

在您的情况下,结合您的grepfind命令(我没有测试您的命令,假设它们有效),它将是:

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个文件,并会检查每个文件的第二列,如果第二列值为零则会打印FILENAMEline 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