Я получаю ту же последовательность проблем с моим модулем Wi-Fi HP 15 -ay188nb (rtl8723be ). Я иду в магазин (он был еще на гарантии )и я получаю его обратно с 2 антенами исправными (без объяснений ), поэтому я подозреваю плохую сборку или бракованный модуль. Это было до последнего обновления ядра, так что, вероятно, это не связано с ядром, просто совпадение! Mint 19.1, ядро 4.15.0 -47 -универсальный #50 -Ubuntu SMP ср 13 марта 10 :44 :52 UTC
Вы можете использовать этот awk
скрипт:
awk 'NR==FNR && /^rng_samp_rate/ { value=$0 }
NR!=FNR && !/^sbas/ { print }
NR!=FNR && /^sbas/ { print $0 " -" value }' supermaster.PRM script.in > script.out
Первый файл должен быть файлом параметров,второй файл сценария оболочки, который необходимо изменить. (Этот скрипт awk
принимает последнее вхождение rng_samp_rate
.)
Вывод
#!/bin/bash
#SBATCH --job-name=InSAR
#SBATCH --ntasks=128
#SBATCH --time=7-00:00:00
#SBATCH --mail-type=fail,end
#SBATCH --export=all
#SBATCH --out=Forge-%j.out
#SBATCH --mem=256000
module load GMT
module load GMTSAR
module load parallel
sbas intf.tab scene.tab 19 10 8469 6097 -rng_samp_rate = 64345238.125714
csh plot_sbas.csh
Конечно, вы также можете использовать другие инструменты, такие как grep
и sed
.
sed "s/^sbas.*/& -$(grep '^rng_samp_rate' supermaster.PRM|head -1)/" script.in > script.out
или, может быть, немного проще для понимания
#! /bin/sh
VALUE="$(grep '^rng_samp_rate' supermaster.PRM|head -1)"
sed "s/^sbas.*/& -$VALUE/" script.in > script.out
(Здесь я использую первое вхождение rng_samp_rate
.)
Обе команды предполагают, что никакие другие строки не начинаются с rng_samp_rate
или sbas
и что файл параметров всегда содержит строку rng_samp_rate
. Сценарий sed
предполагает, что строка значения из файла параметров не содержит /
.
Редактировать :Как изменить файл сценария вместо создания нового выходного файла?
Некоторые команды, напр. sed
, поддержка редактирования места -, которое можно использовать для изменения файла сценария без явного создания отдельного выходного файла.
sed -i.bak -e "some script" script.in
Как правило, после команды всегда можно использовать подходящую команду mv
, например.
awk 'some script' supermaster.PRM script.in > script.out && mv script.out script.in
Команда &&
гарантирует, что исходный сценарий будет перезаписан только в том случае, если команда awk
не указала на ошибку.
Если вы хотите сделать больше модификаций, вы можете расширить awk
или sed
скрипт (для лучшей производительности )или запустить несколько скриптов последовательно или подключиться к каналу. (Для получения подробной информации необходимо написать дополнительные требования.)
Вы можете написать это с помощьюed
:
printf '%s\n' \
'/^sbas /s/$/ -/' \
'. r !grep ^rng_samp_rate supermaster.PRM | head -1' \
'-1,.j' \
'w' \
'q' | ed -s shellscript
Это изменяет (первую )строку, которая начинается с текста " sbas
", добавляя пробел и тире. Затем он считывает вывод команды оболочки в следующую строку; команда оболочки ищет текст «rng_samp_rate
» в начале строки в supermaster.PRM, а затем использует head -1
для получения только первого такого результата. Этот вывод затем соединяется с предыдущей строкой. Затем сохраняем файл на диск и выходим.
Если дополнительные пробелы в исходном тексте вызывают затруднения, их можно уменьшить, немного изменив шелл-код:
...
grep ^rng_samp_rate supermaster.PRM | head -1 | sed 's/ */ /'
...
... который просто добавляет команду sed
, которая заменяет 1 или более пробелов одним пробелом. Если после знака равенства -могут появляться лишние пробелы, измените команду sed на:sed 's/ */ /g'
.