Моя проблема заключалась в непонимании того, как работают списки контроля доступа POSIX; в частности, я предположил, что ACL по умолчанию устанавливают разрешения для каталога, к которому они были применены, хотя на самом деле они применяются только к подкаталогам и файлам , созданным после того, как ACL по умолчанию были применены к родительскому объекту. и вообще не применять родительский объект.
Что меня насторожило, так это апелляция в списке разработчиков NFS по поводу этой проблемы. Один из разработчиков указал (, и это важно знать ), что NFS совершенно не зависит от этого и просто обращается к разрешениям, установленным в базовой файловой системе сервера. Это подтолкнуло меня к рассмотрению списков контроля доступа POSIX в файловой системе сервера, и --после некоторых экспериментов (это плохо документировано)--я реализовал описанную выше функциональность и воссоздал списки контроля доступа POSIX, чтобы они действительно делали то, что я хотел их делать. После этого проблема исчезла.
Если ваша оболочка поддерживает подстановку процессов, вы можете использовать команду paste
следующим образом:
paste \
<(sed -n -e '1,33p' myfile | awk '{ sum += $3 } END { print sum }') \
<(sed -n -e '34,40p' myfile | awk '{ sum += $3 } END { print sum }') \
<(sed -n -e '41,49p' myfile | awk '{ sum += $3 } END { print sum }') >>../pop.txt
Однако обработка одного и того же файла несколько раз таким образом неэффективна -вместо этого вы можете использовать одну команду awk, например
awk '{sum+=$3} NR==33{s1=sum; sum=0} NR==40{s2=sum; sum=0} NR==49{print s1,s2,sum; exit}' >>../pop.txt
(отвечая на последующий -вопрос вверх в комментариях ), чтобы добавить PWD в качестве первого столбца, вы можете сделать
awk -v cwd="$(basename "$PWD")" '
{sum+=$3} NR==33{s1=sum; sum=0} NR==40{s2=sum; sum=0} NR==49{print cwd,s1,s2,sum; exit}
'
Кстати, избегайте таких конструкций, как
for f in `ls -d./*/`
по причинам, обсуждаемым здесь Bash Pitfall #1