Невозможно разрешить группе редактировать без sudo файлы, в которые у них нет прав на запись.
Пользователь и группа с именем www-data
не совпадают (у каждого пользователя есть группа с именем пользователя, в которую входят только они сами, поэтому существует группа с именем www-data
. Если вы добавите других людей в эту группу, они будут иметь разрешения группы, а не разрешения пользователя).
Вы должны применить chmod g+w
к файлам, к которым у группы www-data
должен быть доступ для записи. Как правило, хранить файлы в веб-каталоге 770 безопасно.
Я думаю, что теперь разобрался со следующим, на случай, если кто-то еще прочитает это и ему понадобится это. Спасибо еще раз.
FNR == NR {
for (i = 2; i <= NF; i++) { a[i,$1] = $i }
b[$1];
next;
}
($1 in b) { # check if row in file2 existed in file1
for (i = 2; i <= NF; i++) {
if (a[i,$1] == $i)
printf("%s->col%d: %s vs %s: Valid\n", $1, i-1, a[i,$1], $i);
else
printf("%s->col%d: %s vs %s: Failure\n", $1, i-1, a[i,$1], $i);
}
delete b[$1]; # delete entries which are processed
}
END {
for (left in b) { # look which didn't match
for (i = 2; i <= NF; i++)
printf("%s->col%d: %s vs (blank): Not Equal\n", left, i-1, a[i,left])
}
}
Даны следующие входные файлы:
$ cat in1 in2
Column 1, Column 2
abc , 123
def , 234
adf , 567
Column 1, Column 2
abc , 123
def , 234
adf , 578
Сначала мы их сортируем; затем мы можем сшить их в один файл:
$ sort in1 > in1.sorted; sort in2 > in2.sorted; paste in{1,2}.sorted
Column 1, Column 2 Column 1, Column 2
abc , 123 abc , 123
adf , 567 adf , 578
def , 234 def , 234
awk
нам поможет, но запятые мешают; мы можем избавиться от них сначала с помощью sed
:
$ paste in{1,2}.sorted | sed s/,//g
Column 1 Column 2 Column 1 Column 2
abc 123 abc 123
adf 567 adf 578
def 234 def 234
А затем мы можем сбросить его с помощью быстрой awk
:
$ paste in{1,2}.sorted | sed s/,//g | awk '$2 == $4 {print $1,"Validated"}; $2 != $4 { print $1,"Failed"}'
Column Failed
abc Validated
adf Failed
def Validated
Это также можно сделать с помощью raw awk
, с тем преимуществом, что можно вырезать строки заголовка и не полагаться на одни и те же данные, находящиеся в одном порядке, что устраняет необходимость в сортировке:
$ awk 'FNR != 1 && NR == FNR {data[$1]=$3} FNR != 1 && NR != FNR {if(data[$1]==$3) {print $1, "Validated"} else {print $1, "Failed"} }' in{1,2}
abc Validated
adf Failed
def Validated
Здесь используется несколько магических awk
встроенные переменные и связанные с ними уловки:
NR
- общее количество обработанных записей FNR
- общее количество обработанных записей в текущем файле FNR! = 1
- пропускает первую строку каждого файла (не обрабатывает заголовки как данные) NR! = FNR
- запускается только после того, как первый файл был полностью прочитан и мы начали читать последующие файлы. Это позволяет нам предварительно заполнить массив data
для тестирования, как только мы начнем пережевывать второй файл.