Может быть более элегантный способ, но вот двухэтапный:
for user in $(sort -n -t: -k3 /etc/passwd | cut -d: -f1)
do
grep ^${user}: /etc/shadow
done > /tmp/shadow.new
Он читает / etc / shadow один раз для каждой записи в / etc / passwd.
В Perl:
perl -pe 's/(\S+)(\s+)(.*)/$3$2$1/' file
(\S+)
захватывает все непробельные символы с начала
(\s+)
захватывает все пробелы, следующие за символом захваченные символы
(.*)
захватить все остальное до конца строки
$3$2$1
переворачивает 3 совпадающих шаблона
awk '{first = $1; $1=""; print $0, first}' file.txt
Сохраните первый столбец в переменной, запишите пустой в первый столбец, распечатайте всю строку($0$
— это вся строка, теперь с пустым первым столбцом ), за которым следует первый столбец.