Демон действительно запущен. Вам нужно будет использовать sudo
, чтобы получить достаточно привилегий для связи с ним:
sudo tgtadm --lld iscsi --op show --mode target
Простой сценарий оболочки для добавления строк из файла newdata
в datafile
. Должно быть просто изменить newdata
на здесь -doc. На самом деле это не очень эффективно, так как вызывает grep
для каждой (новой )строки ввода:
target=datafile
while IFS= read -r line ; do
if ! grep -Fqxe "$line" "$target" ; then
printf "%s\n" "$line" >> "$target"
fi
done < newdata
Для каждой строки мы используем grep
, чтобы узнать, существует ли она уже в целевом файле, -F
для фиксированного, -совпадения строки, (без регулярных выражений, ), -x
для полного совпадения строки, и -q
для подавления вывода совпадающих строк. grep
возвращает ложный код ошибки, если не находит совпадающую строку, поэтому добавляет к целевому файлу, если отрицательный результат верен.
Более эффективно, в awk
. Это зависит от того, что awk
может обрабатывать произвольные строки как ключи к массиву.
$ awk 'FNR == NR { lines[$0] = 1; next } ! ($0 in lines) {print}' datafile newdata
Первая часть FNR == NR { lines[$0] = 1; next }
загружает все строки первого входного файла в качестве ключей в (ассоциативный )массив lines
. Вторая часть ! ($0 in lines) {print}
работает со следующими входными строками и печатает строку, если ее нет в массиве, то есть «новые» строки.
Результирующий вывод содержит только новые строки, поэтому его необходимо добавить к исходному файлу, например. сsponge
:
$ awk 'FNR == NR { lines[$0] = 1; next } ! ($0 in lines) {print}' datafile newdata | sponge -a datafile
Или мы могли бы awk
добавить строки к последней строке, для этого просто нужно передать имя файла вawk
:
$ target=datafile
$ awk -vtarget="$target" 'FNR == NR { lines[$0] = 1; next }
! ($0 in lines) {print >> target}' "$target" newdata
Чтобы использовать здесь -документ с awk
, нам нужно добавить-
(stdin )в качестве явного исходного файла, в дополнение к настройке перенаправления,такawk... "$target" - <<EOF
filename='openFileLimit.txt'
while read p; do
if grep "$p" /target/file/and/path; then
echo "$p already present"
else
echo "$p" >> /target/file/and/path
fi
done < $filename