Позволяет говорят, что у меня есть содержание файла как это:
this is a simple file for testing purpose
with few lines in it.
to check the cat and grep command to verfy which is best and less excution time consuming
Сначала я попробовал:
time cat temp.txt
Вывод:
this is a simple file for testing purpose
with few lines in it.
to check the cat and grep command to verfy which is best and less excution time consuming
real 0m0.001s
user 0m0.000s
sys 0m0.001s
Второй я попробовал:
time grep "$" temp.txt
Вывод:
this is a simple file for testing purpose
with few lines in it.
to check the cat and grep command to verfy which is best and less excution time consuming
real 0m0.002s
user 0m0.000s
sys 0m0.002s
Треть я попробовал:
time awk "/$/" temp.txt
Вывод:
this is a simple file for testing purpose
with few lines in it.
to check the cat and grep command to verfy which is best and less excution time consuming
real 0m0.004s
user 0m0.001s
sys 0m0.004s
С:
time awk 1 temp.txt
Вывод:
this is a simple file for testing purpose
with few lines in it.
to check the cat and grep command to verfy which is best and less excution time consuming
real 0m0.004s
user 0m0.000s
sys 0m0.003s
С sed:
time sed "" temp.txt
Вывод:
this is a simple file for testing purpose
with few lines in it.
to check the cat and grep command to verfy which is best and less excution time consuming
real 0m0.002s
user 0m0.000s
sys 0m0.002s
Это означает, что кошка является вполне лучшей командой для печати всего содержания файла. Поскольку требуется меньше времени для выполнения.?
Ответ - "да". Первоначально, это - больше утверждения, так как кошка просто читает файл, тогда как другие два сканируют его для выражения. Ваш time
сценарии являются верной мыслью, но в этих чрезвычайно низких продолжительностях, любое небольшое различие даст ошибочные результаты. Намного лучше использовать больший файл или повторить его многократно.
$ time for i in {1..1000}; do cat temp.txt; done
...
real 0m0.762s
user 0m0.060s
sys 0m0.147s
$ time for i in {1..1000}; do grep "$" temp.txt; done
...
real 0m3.128s
user 0m0.667s
sys 0m0.263s
$ time for i in {1..1000}; do awk "/$/" temp.txt; done
...
real 0m3.332s
user 0m0.720s
sys 0m0.337s
Также (не показанный), я выполнил вышеупомянутые команды многократно, чтобы подтвердить, что каждая команда работала приблизительно в то же время, и следовательно была воспроизводима.
[еще 117] сравнительные тесты Согласно комментариям, вот еще некоторые команды, которые я протестировал. В моей системе, grep "^"
и awk "1"
не имел никакого заметного увеличения эффективности, хотя sed ""
приблизился cat
.
$ time for i in {1..1000}; do grep "^" temp.txt; done
...
real 0m2.992s
user 0m0.527s
sys 0m0.303s
$ time for i in {1..1000}; do awk "1" temp.txt; done
...
real 0m3.185s
user 0m0.570s
sys 0m0.317s
$ time for i in {1..1000}; do sed "" temp.txt; done
...
real 0m0.983s
user 0m0.077s
sys 0m0.193s
У меня есть те же сценарии. В одном я использую кошку, и в другом это - весь 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
время, потраченное для первого сценария, следующим образом (сценарий с операторами CAT):
real 0m0.215s
user 0m0.023s
sys 0m0.238s
Для второго сценария, который имеет только операторы AWK, потраченное время следующие:
real 0m0.132s
user 0m0.013s
sys 0m0.123s
я думаю, что обработка awk файла намного быстрее по сравнению с вызыванием другой внешней функции для чтения файлов. Я был бы счастлив за обсуждение результатов.
я думаю, что AWK работает лучше в некоторых случаях.