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

它几乎可以正常工作,但它不会将所有 $sample 复制到 Previous.Training.dat 即使我确定这些都在 Remaining.Simulations.dat 出现此错误

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

你知道如何解决吗?谢谢

4

2 回答 2

5

这是因为您正在尝试 grep 类似的东西-4.5并将grep其视为选项而不是搜索字符串。如果您--用来表示没有更多选项,这应该可以正常工作:

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.2grep,它将匹配任何包含7后跟任何字符的行,然后是2因为:

  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 回答