Соответствие как , так и в строке с несколькими Coloumns в Unix

Я не знаком с snmpwalk, но из вопроса (и из моего предыдущего неправильного ответа) кажется, что он выдает несколько строк вывода. Мне также кажется, что большинство результатов вашего сценария повторяются/избыточны, т.е. всегда есть две строки с форматом:

A,B,C
...
A,B,D

и вы хотите получить другой результат с половиной строк и выглядящий как

A,B,C,D

В этом случае, возможно, будет проще оставить ваш сценарий как есть и передать вывод через трубу следующему сценарию AWK:

BEGIN{
  FS=",";
}
{
  if ( ($1,$2) in A ) {
     print A[$1,$2] "," $3;
  } else {
     A[$1,$2]=$1 "," $2 "," $3;
  }
}

который выглядит следующим образом для однострочного сценария, который вы можете вырезать и вставить.

| awk 'BEGIN{FS=","}{if ( ($1,$2) in A ) {print A[$1,$2] "," $3;} else {A[$1,$2]=$1 "," $2 "," $3;}}'

Это поможет?

0
07.09.2018, 13:03
4 ответа

Grep имеет режим регулярных выражений Perl (-P )и только count -(-c)

$ grep -c -P 'ABCD\ \t\,EFGH,\,' file
1
0
28.01.2020, 04:13

Попробуйте это, чтобы получить количество файлов с шаблоном

grep -rlP "ABCD \t,EFGH, " directory   | wc -l
  • rрекурсивный поиск файлов
  • PPerl-режим
  • lпечатать имя каждого входного файла, из которого обычно печатается вывод. Сканирование останавливается при первом совпадении.
  • количество строк

Чтобы получить список файлов:

grep -rlP "ABCD \t,EFGH, " directory   |  awk -F '/' '{print $2}' 
0
28.01.2020, 04:13

Эта команда подсчитывает количество файлов в текущем каталоге, содержащих совпадения с вашим шаблоном:

grep -Psl 'ABCD \t,EFGH,,' * | wc -l

(Как и в большинстве других решений, он будет неправильно учитывать файлы, которые содержат встроенные символы новой строки в своем имени. В мире GNU вы можете использовать grep -PZsl '...pattern...' * | tr '\n\0' 'X\n' | wc -l, чтобы исправить это.)

0
28.01.2020, 04:13

Сzsh

(cd folder && grep -l $' \t './*(D.)) | grep -c /

Будет подсчитано количество обычных файлов в каталоге folder, содержащих хотя бы одно вхождение <space><tab><space>.

Рекурсивно:

(cd folder && grep -l $' \t './/**/*(D.)) | grep -c //

Рекурсивно вы также можете использоватьfind:

(cd folder && find.//. -type f -exec grep -l $' \t ' {} +) | grep -c //

Если вы хотите учитывать только файлы, в которых <space><tab><space>находится в первом столбце, измените шаблон на $'^[^,]* \t '.

0
28.01.2020, 04:13

Теги

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