просмотр файла из двух столбцов

Вы должны использовать опцию -m для создания домашнего каталога при выполнении useradd . -d ... предназначен только для переопределения имени по умолчанию для домашнего каталога, которое совпадает с тем, которое вы фактически дали. Теперь вам нужно chown name: name / home / name для каждого имени для восстановления.

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

0
04.05.2018, 20:55
4 ответа
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)) }'
1
28.01.2020, 02:16

Сawk:

$ for param in $(awk '$1 > 20 { print $3 }' inputfile); do./process.sh "$param"; done
2
28.01.2020, 02:16

На самом деле вам не хотелось бы анализировать данные в самой оболочке, а использовать такой инструмент, как 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).

2
28.01.2020, 02:16

Вы также можете попробовать с gnu sed

sed -E 's/([0-9]*) \| (.*)/[ \1 -gt 20 ] \&\& echo do something with \2/e' infile
0
28.01.2020, 02:16

Теги

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