Вы должны использовать опцию -m
для создания домашнего каталога при выполнении useradd
. -d ...
предназначен только для переопределения имени по умолчанию для домашнего каталога, которое совпадает с тем, которое вы фактически дали. Теперь вам нужно chown name: name / home / name
для каждого имени для восстановления.
-m
полезен, поскольку он также копирует некоторые стандартные файлы в домашний каталог.
awk -F'|' '$1 > 20 { system("/path/to/another/script.sh "$2 }' < file.text
Это говорит awk разделить ввод на поля на основе символа вертикальной черты. Любое первое поле, значение которого больше 20, инициирует системный вызов... чего угодно. Имейте в виду, что аргумент (здесь $2, но это может быть $0 или любое другое вычисление, которое вы делаете в awk ), передается сценарию через вызов оболочки, поэтому, если эти значения могут содержать специальные символы оболочки -, внимательно цитируйте. Я сошлюсь на один из ответов Стефана для примера того, как это сделать:
awk 'function escape(s) {
gsub(/'\''/,"&\\\\&&",s)
return "'\''" s "'\''"
}
{ system("/path/to/another/script.sh" escape($2)) }'
Сawk
:
$ for param in $(awk '$1 > 20 { print $3 }' inputfile); do./process.sh "$param"; done
На самом деле вам не хотелось бы анализировать данные в самой оболочке, а использовать такой инструмент, как awk
, который сделает это за вас.
awk -F '[[:blank:]|]+' '$1 > 20 { print $2 }' file
Это предписывает awk
рассматривать каждую строку файла как набор полей, разделенных любым числом вертикальной черты -символов или пробелов (пробелов или табуляции ). Когда первое поле больше 20, печатается второе поле.
Связанные:
Если второй столбец содержит пробелы, вы можете использовать [[:blank:]]*[|][[:blank:]]*
в качестве разделителя:
awk -F '[[:blank:]]*[|][[:blank:]]*' '$1 > 20 { print $2 }' file
[|]
соответствует буквальному символу вертикальной черты,и может быть заменен на \\|
(, если вам нравится обратная косая черта ).
Далее выполняется сценарий с каждым экземпляром второго столбца, чей первый столбец больше 20, в качестве аргумента командной строки:
awk -F '[[:blank:]]*[|][[:blank:]]*' '$1 > 20 { print $2 }' file |
xargs -I XX./script.sh XX
С чем-то вроде -P 4
в качестве опции к xargs
вы можете запустить несколько параллельных экземпляров вашего скрипта одновременно (четыре с-P 4
).
Вы также можете попробовать с gnu sed
sed -E 's/([0-9]*) \| (.*)/[ \1 -gt 20 ] \&\& echo do something with \2/e' infile