3

私のコンピューターには、調査のためにオンラインで見つけたデータベース全体を含むディレクトリがあります。このデータベースには何千ものファイルが含まれているため、必要なことを行うために、ファイル 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"}'

これをコンソールに入れると、アクセスする必要のあるファイルのディレクトリに既に入っています。必要なデータは、すべてのファイルの 17 行目から始まります。データは次のようになります。

some number    some number    some number
some number    some number    some number
    .              .              .
    .              .              .
    .              .              .

最初の列の値が 0.4 (またはおよそ) のときにデータにアクセスし、最初の列の値がおよそ 2.5 になるまで情報を取得したいと考えています。最初の列は波長を表します。後で各ファイルがすべて同じであることを確認したいので、ファイルにコピーします。2 番目の列は反射率を表し、後でこの情報を取得してデータ マトリックスを作成するため、これを別のファイルにしたいと考えています。3 列目は反射率の標準偏差です。

私が今抱えている問題は、このコードを実行すると、次のエラーが発生することです: No such file or directory

なぜこのエラーが発生するのか、または私がやろうとしていることのコードの書き方を教えてくれる人がいたら、教えてください...とても感謝しています。

4

2 に答える 2

3

すばらしい試みですが、これはの出力を解析してはならないlsためです。それでも、おそらく探していたのは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"
}
于 2013-11-23T05:57:58.930 に答える