Вы используете NR
в качестве индекса, когда помещаете данные вm
:
m[i,NR]=$i
После чтения файла legend
NR
не сбрасывается, что означает, что индекс не начинается с 1,1
. Вместо этого вы можете использовать FNR
или mh + 1
.
Остальную часть кода я не смотрел.
Некоторые предложения по улучшению:
Я не знаю, как выглядят ваши данные, поэтому предположил. NF
и FNR
остаются нетронутыми из последней строки ввода в блоке END
, поэтому, пока последняя строка вашего последнего файла была правильной и полностью указанной, это должно работать. Это избавляет от переменных mh
и mw
.
Самый простой способ зациклиться на простом массиве — использовать for (i in arr)
. Это устанавливает i
для каждого индекса в массиве по очереди. Однако обратите внимание, что индексы вполне могут быть представлены в цикле «не по порядку».
Первый блок читает файл legend
. Это означает, что этот должен быть первым файловым операндом в командной строке.
NR == FNR { l[FNR] = $1; next }
{
for (i = 1; i <= NF; i++) {
m[i,FNR] = $i
}
print
}
END {
print "LEGEND:"
for (i in l) print l[i]
print "MAIN:"
for (h = 1; h <= FNR; h++) {
printf("For line %d\n", h)
for (w = 1; w <= NF; w++) {
printf("For element %d\n", w)
if (m[w,h]) print m[w,h]
}
}
}
Для этой последней двойной петли вы также можете сделать
for (i in m) print i, m[i]
но вы пропустили порядок и дополнительный информационный вывод.
Решение было дано в комментарии muru .
sudo will read each file in /etc/sudoers.d, skipping file names that end in ‘~’ or contain a ‘.’ character...
https://www.sudo.ws/man/1.8.15/sudoers.man.html#Including_other_files_from_within_sudoers
Как указал Роайма в другом комментарии:
The dot in the username doesn't cause the issue. It's because you chose to put the sudo configuration in a file whose name contains a dot.
В этом-то и была проблема. И решение, которое я проверил, было просто:
sudo mv /etc/sudoers.d/user.name /etc/sudoers.d/username