кошка по сравнению с grep по сравнению с командой awk получает содержание файла, какой является более эффективным и менее трудоемким?

Позволяет говорят, что у меня есть содержание файла как это:

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

Это означает, что кошка является вполне лучшей командой для печати всего содержания файла. Поскольку требуется меньше времени для выполнения.?

1
задан 24 December 2014 в 06:40

2 ответа

Ответ - "да". Первоначально, это - больше утверждения, так как кошка просто читает файл, тогда как другие два сканируют его для выражения. Ваш 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

3
ответ дан 10 November 2019 в 09:20

У меня есть те же сценарии. В одном я использую кошку, и в другом это - весь 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 работает лучше в некоторых случаях.

0
ответ дан 10 November 2019 в 09:20

Другие вопросы по тегам:

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