Самая короткая команда для вычисления суммы столбца вывода на Unix?

Звучит так, будто вы хотите построить что-то полу -автоматическое. Scrapy не подходит для этого, и, как вы говорите, он не может справиться с JavaScript.

Я бы порекомендовал попробовать селен. Он запускает полнофункциональный браузер Chrome и поддерживает сценарии. См. https://selenium-python.readthedocs.io/

. Вы можете остановить сценарий и некоторые события (например, reCAPTCHA), а затем позволить пользователю вступить во владение.

48
задан An̲̳̳drew 17 November 2008 в 15:05
поделиться

2 ответа

У меня есть служебный сценарий, который просто складывает все столбцы. Обычно достаточно легко захватить то, которое Вы хотите от короткого вывода. В качестве награды некоторые суффиксы SI распознаны.

#!/usr/bin/awk -f
# Sum up numerical values by column (white-space separated)
#
# Usage:  $0 [file ...]
#
# stern, 1999-2005

{
    for(i = 1; i <= NF; ++i) {
        scale = 1
        if ($i ~ /[kK]$/) { scale = 1000 }
        if ($i ~ /[mM]$/) { scale = 1000*1000 }
        if ($i ~ /[gG]$/) { scale = 1000*1000*1000 }
        col[i] += scale * $i;
    }
    if (NF > maxnf) maxnf = NF;
}

END {
    for(i = 1; i <= maxnf; ++i) { printf " %.10g", col[i] }
    print "";
}

Пример с пользовательским разделителем полей:

$ head /etc/passwd | addcol -F:
0 0 45 39 0 0 0
4
ответ дан 26 November 2019 в 18:40
поделиться

Я бы попытался построить строку вычисления и передать ее в bc следующим образом:

  1. grep строки, содержащие числа
  2. sed удалить все символы до (и после) числа в каждой строке
  3. xargs результат (чтобы получить строку чисел, разделенных пробелами)
  4. tr замените пробелы на символы '+'
  5. хорошего аппетита до н.э. !

ipcs -mb | grep -w '^ m' | sed 's /^.* \ s //' | xargs | tr '' + | bc

Похоже, это немного длиннее, чем решение awk , но для всех, кто не может прочитать (и понять) нечетный код awk , это может быть легче понять. ..: -)

Если bc не установлен, вы можете использовать двойные круглые скобки на шаге 5 выше, чтобы вычислить результат:

  • echo $ (($ (ipcs -mb | grep -w ' ^ m '| sed' s /^.* \ s // '| xargs | tr' '+))) или
  • SUM = $ (($ (ipcs -mb | grep -w' ^ m '| sed' s /^.* \ s // '| xargs | tr' '+))) или
  • ((SUM = $ (ipcs -mb | grep -w' ^ m '| sed 's /^.* \ s //' | xargs | tr '' +)))

Интервалы после и перед двойными скобками необязательны.

13
ответ дан 26 November 2019 в 18:40
поделиться
Другие вопросы по тегам:

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