0

このような new.samples.dat というファイルがあります

-4.5000000000E-01 8.0000000000E+00 -1.3000000000E-01
5.0000000000E-02 8.0000000000E+00 3.4000000000E-01
...

Remaining.Simulations.dat という別のファイルでこのファイルのすべての番号を検索し、それらを別のファイルにコピーする必要があります。私はこれが好きでした

for sample_index in $(seq 1 100)
do
  sample=$(awk 'NR=='$sample_index'' new.samples.dat)
  grep "$sample" Remaining.Simulations.dat >> Previous.Training.dat
done

ほとんど問題なく動作しますが、Remaining.Simulations.dat にあると確信している場合でも、すべての $sample を Previous.Training.dat にコピーするわけではありません。このエラーが表示されます

grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

それを解決する方法はありますか?ありがとう

4

2 に答える 2

5

これは、次のようなものをgrepしようとしてい-4.5grep、それを検索文字列ではなくオプションとして扱っているためです。これ以上オプションがないことを示すために使用する場合--、これは問題なく機能するはずです。

pax> echo -4.5000000000E-01 | grep -4.5000000000E-01
grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

pax> echo -4.5000000000E-01 | grep -- -4.5000000000E-01
-4.5000000000E-01

さらに、文字列7.2をに渡すと、任意の文字が後に続くgrep任意の行に一致します。72

  1. .正規表現は特殊文字として扱われます。と
  2. 開始マーカーと終了マーカーがなければ、に7.2も一致します。47.27.25
于 2013-06-19T08:36:40.900 に答える
1

次のようなものを試すことawkができます:

awk '
NR==FNR {
    for (i=1;i<=NF;i++) {
        numbers[$i]++
    }
    next
}
{
    for (number in numbers)
        if (index ($0,number) > 0) {
            print $0

    }
}' new.samples.dat Remaining.Simulations.dat > anotherfile
于 2013-06-19T17:51:51.420 に答える