Назад | Перейти на главную страницу

grep для записи массива в файле

поэтому у меня есть файл step1, содержащий такие данные, как

field [T]:0.000
heatstart [s]: 1.50E+1
a[a],b[b],[c[c],d
1.02E-1,2.31E-1,...
1.50E+1,4.26E-1,...
...

и файл с именем var4, содержащий только запись 1.50E+1. Я использовал mapfile, чтобы получить эту запись как переменную

mapfile -t var<var4

какой grep может использовать для поиска в данных, чтобы дать мне номер строки

grep -n "${var[0]}" step1

Использование этого дает мне только запись в строке 2 шага 1, а не запись в строке 5. Если я скопирую запись из строки 5 в другую строку в начале, я не получу ее и с помощью grep, но если я скопирую ее где-то в середине строки его получает grep. Но если я вставлю файл step1 в себя, других результатов я не получу.

Я также попытался получить переменную для 1.50E + 1 с помощью sed и вырезать как

sed -n '2p' < step1>var3
var4="$(cut -c15- var3)"

но это приводит к той же проблеме. Перед числом в переменной нет места, потому что даже если я вырежу так много из того, что 1 больше не будет в переменной, я не получу всех результатов. Кто-нибудь знает, почему это происходит или как это обойти?

Я так понимаю, у вас будет много файлов stepN и varN?

Я бы использовал параметр -f для grep и -n, как и у вас.

grep -n -f var4 step4

Это выводит:

mdiehn@frank ~ $ grep !*
grep -n -f var4 step4
1:tstart [s]: 1.50E+1
4:1.50E+1,4.26E-1,...

Если вам не нужен tstart, либо устраните его с помощью grep -v, либо мы можем перейти к более интересным сценариям awk.