У меня одинаковые скрипты. В одном я использую cat, а в другом - все AWK.
Вот первый:
#!/bin/bash
lines=$(cat /etc/passwd | wc -l)
for ((i=1 ; i <=$lines ; i++ ))
do
user=$(cat /etc/passwd | awk -F : -vi=$i 'NR==i {print $1}')
uid=$(cat /etc/passwd | awk -F : -vi=$i 'NR==i {print $3}')
gid=$(cat /etc/passwd | awk -F : -vi=$i 'NR==i {print $4}')
shell=$(cat /etc/passwd | awk -F : -vi=$i 'NR==i {print $7}')
echo -e "User is : $user \t Uid is : $uid \t Gid is : $gid \t Shell is : $shell"
done
Вот второй:
#!/bin/bash
lines=$(awk 'END {print NR}' /etc/passwd)
for ((i=1 ; i <=$lines ; i++ ))
do
user=$(awk -F : -vi=$i 'NR==i {print $1}' /etc/passwd)
uid=$(awk -F : -vi=$i 'NR==i {print $3}' /etc/passwd)
gid=$(awk -F : -vi=$i 'NR==i {print $4}' /etc/passwd)
shell=$(awk -F : -vi=$i 'NR==i {print $7}' /etc/passwd)
echo -e "User is : $user \t Uid is : $uid \t Gid is : $gid \t Shell is : $shell"
done
[d3 ] Время, затрачиваемое на первый скрипт, выглядит следующим образом (скрипт с операторами CAT): real 0m0.215s
user 0m0.023s
sys 0m0.238s
Для второго скрипта, который имеет только инструкции AWK, выполняется следующее время:
real 0m0.132s
user 0m0.013s
sys 0m0.123s
Я думаю, что обработка awk файла намного быстрее по сравнению с вызовом другой внешней функции для чтения файлов. Я был бы рад за обсуждение результатов.
Я думаю, что AWK лучше работает в некоторых случаях.