Как мне написать awk '{print $ 1 + $ 2 + $ 3} file1> file2 для n столбцов вместо 3?

Ознакомившись с версией исходного кода , которая соответствует номеру версии на вашем снимке экрана, я считаю, что это сработает:

theharvester –d syngress.com –l 10 –b google
ИСПРАВЛЕНИЕ: theharvester –d syngress.com –b google Версия OP не имела флага -l .

Исходная команда, которую вы пытались запустить, имела префикс ./ и суффикс .py , что означает: найдите theharvester.py в текущем каталог и запустите его. Исходя из вашего местоположения, двоичный файл на самом деле называется theharvester и находится в / usr / bin / . Итак, как указал @TNW, сценарий был переименован и установлен в / usr / bin / вместо того места, где автор книги предполагал ваш текущий рабочий каталог. Поскольку / usr / bin / почти наверняка находится в вашем двоичном поиске $ PATH , ./ не подходит.

Также важен промежуток между -d и syngress.com из-за того, как сценарий анализирует аргументы. Похоже, что пробел присутствовал в исходной команде, которую вы пробовали, но не в предложениях некоторых других комментаторов.

0
22.02.2019, 15:07
2 ответа

Вы хотите вычислить сумму полей для каждой записи, так что просто:

awk '{sum = 0; for (i = 1; i <= NF; i++) sum += $i; print sum}' < file1 > file2

Фигурные скобки начинают оператор действия , который выполняется в каждой строке ввода; нет предшествующего условия , которое ограничивало бы его выполнение строками, удовлетворяющими такому условию .

В каждой строке:

  1. Инициализировать переменную sumнулем.
  2. Перебрать поля, начиная с поля #1 и заканчивая последним полем (специальной переменной NF), и увеличивать sumна значение этого поля($i).
  3. Печать значения переменной sum.
6
28.01.2020, 02:16

Это будет немного медленнее, чем awk, но очень лаконично:

perl -MList::Util=sum0 -lane 'print sum0(@F)' file1

Он использует функциюsum0основного модуля List ::Util.

1
28.01.2020, 02:16

Теги

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