Как использовать команду grep в цикле в gnuscript - PullRequest
1 голос
/ 22 сентября 2019

извините, я задаю несколько вопросов.У меня есть файл case.dat, который имеет несколько столбцов, и я хочу извлечь массив данных в соответствии со столбцом 2 в gnuscript.Я попытался с приведенным ниже сценарием, но он дает мне ошибку

array=""
do for [i=300:800:100] {  # I mean start:end:increment. so it should read 300, 400, 500, 600, 700, 800 here
val ="grep i case.dat"        # Want to store the command in a valuel/variable
print val > i.dat              #Here I need to store the data in i.dat
}

ошибка

line 45: undefined variable: dat

мой сценарий bash похож на ниже

##!/bin/bash
case="data"
for i in `seq 100 100 800`
do
       awk '$2=='$i'{print $0}' $case.dat > $i.dat
done

that I want to use at the start of the gnu-script so that the further operation can be done in the rest part of the gnu-script.

1 Ответ

1 голос
/ 26 сентября 2019

Сценарий gnuplot:

do for [i=300:800:100] {
   outfile = sprintf("%d.dat", i)
   command = sprintf("grep %d case.dat",i)
   set print outfile
   print system(command)
   unset print
}

Это создаст отдельные файлы 300.dat 400.dat 500.dat и т. Д.

Если вы хотите сохранить эти подмножества данных полностью внутренними дляgnuplot, т. е. не создавайте никаких новых файлов, вместо этого вы можете создать именованные блоки данных $ data_300 $ data_400 и т. д .:

do for [i=300:800:100] {
    eval( sprintf("set print $data_%3d", i) )
    print( sprintf("grep %d case.dat") )
    unset print
}

Именованные блоки данных обычно можно использовать везде, где вы можете использовать имя файла, например, plot $data_500 with lines.

...