Предполагая, что достаточно проверить цифру в первом столбце:
awk '$1 ~ /[0-9]/ { print $2 }' data.in >data.out
Чтобы убедиться, что это применяется только к строкам после строки NSET_OUTPUT
, вы можете сделать что-то вроде следующего:
sed '1,/NSET_OUTPUT/d' data.in | awk '$1 ~ /[0-9]/ { print $2 }' >data.out
Это приведет к удалению строк перед NSET_OUTPUT
и отправке остальных в сценарий awk
.
Ваш скрипт будет выводить только одно число, поскольку он, для каждой строки ввода , будет искать NSET_OUTPUT
, и, если он найден, пропускает пять строк перед извлечением числа из второго столбец.
Ниже приведена фиксированная версия вашего скрипта:
BEGIN { print_values = 0 }
$12 ~ /NSET_OUTPUT/ {
for (i = 1; i <= 5; i++) {
getline;
}
print_values = 1;
}
print_values == 1 {
x = $2;
print x >"nset_output.dat"
}
Ну, это зависит от:
Это невозможно со стандартными разрешениями posix, так как для удаления файла требуется то же разрешение, что и для добавления: разрешение на запись в содержащем каталоге.
Однако, если ваша файловая система поддерживает списки управления доступом NFSv4 (например, ZFS), это возможно, поскольку существуют отдельные элементы управления «запись данных» (-> создание файлов) и удаление дочерних элементов. Вам просто нужно установить запись «разрешить удаление дочернего элемента» в каталоге для конкретного пользователя, но не запись «разрешить запись данных» (или вместо этого: установить «запретить запись данных»).
Подробное описание см. в https://linux.die.net/man/5/nfs4_acl
В принципе, да, это комбинация привилегий, которая:
Удаление и добавление файлов определяются правами доступа к каталогу, а изменение файлов определяется правами доступа к файлам.
Пример:
➜ пример mkdir -pv пример
➜ пример коснитесь sample/file.txt
➜ пример образца chmod 0700; chmod 0400 образец/файл.txt
➜ пример echo 'sample' > sample/file.txt
zsh: разрешение отклонено: образец/файл.txt
➜ пример rm -f sample/file.txt
➜ пример