Database 使用awk处理数据库

Database 使用awk处理数据库,database,awk,file-processing,Database,Awk,File Processing,我的计算机上有一个目录,其中包含了我在网上找到的用于研究的整个数据库。这个数据库包含数千个文件,所以为了完成我需要的工作,我一直在研究文件I/o的内容。一位程序员朋友建议使用bash/awk。我已经编写了我的代码: #!/usr/bin/env awk ls -l|awk' BEGIN {print "Now running"} {if(NR == 17 / $1 >= 0.4 / $1 <= 2.5) {print $1 > wavel

我的计算机上有一个目录,其中包含了我在网上找到的用于研究的整个数据库。这个数据库包含数千个文件,所以为了完成我需要的工作,我一直在研究文件I/o的内容。一位程序员朋友建议使用bash/awk。我已经编写了我的代码:

    #!/usr/bin/env awk
    ls -l|awk'
    BEGIN {print "Now running"}
    {if(NR == 17 / $1 >= 0.4 / $1 <= 2.5)
    {print $1 > wavelengths.txt;
    print $2 > reflectance.txt;
    print $3 > standardDev.txt;}}END{print "done"}'
我希望在第一列的值为0.4(或近似值)时访问数据,并获取信息,直到第一列的值约为2.5。第一列表示波长。我想在以后验证每个文件的所有属性是否相同,所以我将它们复制到一个文件中。第二列表示反射率,我希望这是一个单独的文件,因为稍后我将获取此信息并从中构建数据矩阵。第三列是反射率的标准偏差

我现在遇到的问题是,当我运行这段代码时,我得到以下错误:没有这样的文件或目录


如果有人能告诉我为什么会出现这个错误,或者可以指导我如何为我正在尝试的事情编写代码。。。我将非常感激。

非常好的尝试,但这是因为你应该这样做。不过,您可能是在寻找
ls-1
,而不是
ls-l
awk
还可以接受一组文件。例如,在所需目录中,您可以运行:

awk -f /path/to/script.awk *
script.awk的内容

BEGIN {
    print "Now running"
}

NR == 17 && $1 >= 0.4 && $1 <= 2.5 {

    print $1 > "wavelengths.txt"
    print $2 > "reflectance.txt"
    print $3 > "standardDev.txt"
}

END {
    print "Done"
}
开始{
打印“正在运行”
}
NR==17&&$1>=0.4&&$1“波长.txt”
打印$2>“reflective.txt”
打印$3>“standardDev.txt”
}
结束{
打印“完成”
}

主要问题是需要引用输出文件名的名称,因为它们是字符串而不是变量。使用:

print $1 > "wavelengths.txt"
而不是:

print $1 > wavelengths.txt

不看代码,您肯定想要
ls
,而不是
ls-l
print $1 > wavelengths.txt