Сравнивая CSV-файлы со столбцом подстановки 1, затем проверяю значения в столбце 2

Невозможно разрешить группе редактировать без sudo файлы, в которые у них нет прав на запись.

Пользователь и группа с именем www-dataне совпадают (у каждого пользователя есть группа с именем пользователя, в которую входят только они сами, поэтому существует группа с именем www-data . Если вы добавите других людей в эту группу, они будут иметь разрешения группы, а не разрешения пользователя).

Вы должны применить chmod g+wк файлам, к которым у группы www-dataдолжен быть доступ для записи. Как правило, хранить файлы в веб-каталоге 770 безопасно.

1
21.03.2017, 20:08
2 ответа

Я думаю, что теперь разобрался со следующим, на случай, если кто-то еще прочитает это и ему понадобится это. Спасибо еще раз.

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])
    }
}
0
28.01.2020, 00:59

Даны следующие входные файлы:

$ 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 для тестирования, как только мы начнем пережевывать второй файл.
0
28.01.2020, 00:59

Теги

Похожие вопросы