Извлечение определенных данных в выходном файле сценария

Это делает сравнение с точки зрения Филиа :

$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileB fileA
this is a string
empty string

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

Аналогично, для получения выхода с точки зрения Fileb :

$ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileA fileB
this is A string
Empty string

больше эффективный подход памяти

Этот подход читается только в двух строках одновременно и, следовательно, более эффективно. С точки зрения Филиа :

$ awk '{a=$0;getline <"fileA";} $0!=a' fileB
this is a string
empty string

с точки зрения FileB :

$ awk '{a=$0;getline <"fileB";} $0!=a' fileA
this is A string
Empty string
-1
05.05.2015, 05:31
2 ответа

Для фильтрации данных из файла лучше использовать GREP. Например:

grep <search string> <filename>

с awk вы можете использовать что-то вроде:

awk '/string/ {command}' <filename>

, чтобы получить подсчет IPS, вы можете использовать

uniq -c <filename>

Это предоставит вам UNIQ IPS с счетчиком

2
28.01.2020, 05:08

Я принимаю это, что «Rolls up» означает, что все новинки удаляются и выходные данные Таким образом, каждую команду «свернуто» на одну строку. Если так, ваш Greep ... | awk ... будет работать, но вам не нужны обе команды («Никогда не используйте два, когда достаточно достаточно», - это вообще хорошая идея). Кроме того, ваша командная строка имеет пару выпусков (например, нет ввода для GREP , но имя файла, данного awk , означает, что GREP не функционально, а также Нет причин использования WC , когда GREP имеет вариант ).

ipaddr=192.168.0.1
grep -c "netstat -anp.*$ipaddr" logfile

Редактировать: Ваш последний комментарий говорит, что вы хотите сосчитать, сколько раз IP-адрес появляется в пределах данного интервала. Поскольку команда Netstat работает несколько раз в интервале, и поскольку они все на одной строке, простой UNIQ -C не будет достаточно. На самом деле, не прибегая к Perl, это первое, что я придумал:

ipaddr=192.168.0.1
grep "netstat -anp.*$ipaddr" logfile |
    tr -cs '0-9.' '\012' |
    grep -c "$ipaddr"

Я предполагаю, что Posix или BSD-стиль TR команда. Кроме того, вторые необходимы GREP , потому что могут быть много других IP-адресов, кроме вас, которые вы ищете (это будет типично для Netstat выхода).

1
28.01.2020, 05:08

Теги

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