Как я могу объединить три строки в одну?

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

tcpdump -lni eth0 -vvv -s 1500 '((udp port 67) and (udp[247:4] = 0x63350103))' | grep --line-buffered -E -i 'client-id|requested-ip|hostname' | awk '{print $NF}'

Как только кто-то подключается к сети, результат выглядит следующим образом. 3 строки, которые показывают MAC, IP и имя хоста в этом порядке. Например:

98:9f:62:51:9d:2e
10.0.2.11
iPhone

Если кто-то подключится, появятся еще 3 линии и т. Д.

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

98:9f:62:51:9d:2e 10.0.2.11 iPhone

Есть ли способ управления этим выходом?

2
задан 28.11.2019, 09:57
2 ответа

Если твоя проблема ограничивается тем, чтобы быть должным печатать 3 lГ-neas в раз, со мной случается, что podrГ-схвати, решать это с рукописного шрифта awk asГ-:

awk '{printf (NR%3==0) ? [110] "\n" : [110]" "}'

BГЎsicamente мы печатаем с printf (которые не добавляют разрыв lГ-nea) и в случае nГєmero lГ-nea будьте mГєltiplo 3 (NR%3==0) добавляем \n.

3
ответ дан 01.12.2019, 10:44
  • 1
    ¡ Очень хороший ответ! Ты можешь упрощать с одним awk '{printf (NR%3) ? [110] " " : [110]"\n"}', так как NR%3 == 0 не так необходим и может использоваться Ваш результат implí citamente – fedorqui 28.11.2019, 09:55

EstГЎ очень довольно она soluciГіn, который предлагает Патрисио Морачо , является очень интересным способом использовать NR.

мы можем давать Ему возвращение с чем-то включенным mГЎs idiomГЎtico:

awk 'ORS=(NR%3) ? FS : RS'

ВїCГіmo функционирует?

  • RS - разделитель реестров.
  • ORS - разделитель реестров, напечатав их.
  • NR - nГєmero реестра.
  • FS - сельский разделитель реестра.

По умолчанию, RS и ORS - "\n" и FS - место. Поэтому, мы можем делать этими неверный ход в игре : если nГєmero реестра он не mГєltiplo 3, используй как ORS место. В противоположном случае (а именно, в lГ-neas mГєltiples 3) используй RS.
В эффекты prГЎcticos: если она lГ-nea он mГєltiple 3, напечатай обычно. Если не, он печатает следуемая местом.

ты Можешь читать много truquillos этих в Idiomatic awk в inglГ©s .


Даже mГЎs fГЎcil - с xargs:

xargs -n 3

Пример:

$ seq 10 | xargs -n 3
1 2 3
4 5 6
7 8 9
10

то, что его делает xargs, состоит в том, чтобы брать аргументы, которые приходят из pipe. Сказав ему -n 3 то, что он делает, состоит в том, чтобы оказываться их вовлеченными 3 в 3.

3
ответ дан 01.12.2019, 10:44

Теги

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