Распечатать всю информацию на основе разделителя - PullRequest
1 голос
/ 02 июля 2019

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

Id Name            Persona       -WWN/iSCSI_Name- Port
73 GLOB-A2-WST2   WindowsServer 5001438036830FDE 0:2:4
                                 5001438036830FDC 0:2:3
                                 5001438036830FDE 1:2:4
                                 5001438036830FDC 1:2:3
74 GLOB-A2-WST3   WindowsServer 5001438036830FEE 0:2:2
                                 5001438036830FEC 1:2:1
                                 5001438036830FEC 0:2:1
                                 5001438036830FEE 1:2:2
56 GLOBBACDB01      Generic       50014380073051CC ---
                                 50014380073051CE ---
64 GLOBCIBSSLRDB01  Generic-ALUA  5001438024D29646 0:2:2
                                 5001438024D29644 1:2:1
                                 5001438024D29644 0:2:1
                                 5001438024D29646 1:2:2
65 GLOBCIBSSLRDB02  Generic-ALUA  5001438024D293C6 0:2:4
                                 5001438024D293C4 1:2:3
                                 5001438024D293C4 0:2:3
                                 5001438024D293C6 1:2:4
57 GLOBCRMDB01      WindowsServer 5001438026EDA668 ---
                                 5001438026EDA66A ---
44 GLOBETEBPIDB01   WindowsServer 50014380296B9B86 1:2:4
37 GLOBVMWBCKHS01   WindowsServer 10000090FA371A09 1:2:4
                                 10000090FA371A08 1:2:3
                                 10000090FA371A08 0:2:3
                                 10000090FA371A09 0:2:4
17 S5POC           Generic-ALUA  21000024FF4D665E 1:2:4
                                 21000024FF4D6660 1:2:3
                                 21000024FF4D6660 0:2:3
                                 21000024FF4D665E 0:2:4
34 SOXICS50        Generic       210100E08BB0EE80 ---
                                 210100E08BB2C145 ---
                                 10000000C94A7EC7 ---
                                 210000E08B92C145 ---
59 UNISI279        AIX-legacy    10000000C944BBF0 ---
                                 10000000C944C29F ---
55 VMX01          VMware        10000000C9D09728 ---
                                 10000000C9D09ADC ---
58 VMX02          VMware        10000000C9D0AC2B ---
                                 10000000C9D0AC27 ---

если я попытался выполнить grep, например, GLOBCIBSSLRDB01,

мой вывод просто напечатает строку, с которой он связан.

$ cat p | grep -i GLOBCIBSSLRDB01
64 GLOBCIBSSLRDB01  Generic-ALUA  5001438024D29646 0:2:2

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

Name of the file where the host is found 
64 GLOBCIBSSLRDB01  Generic-ALUA     5001438024D29646 0:2:2
                                     5001438024D29644 1:2:1
                                     5001438024D29644 0:2:1
                                     5001438024D29646 1:2:2
echo (space)

Name of the file where the host is found 
64 GLOBCIBSSLRDB01  Generic-ALUA     5001438024D29646 0:2:2
                                     5001438024D29644 1:2:1
                                     5001438024D29644 0:2:1
                                     5001438024D29646 1:2:2

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

так что каждый раз, когда в файле будет найден хост, он будет печататься, как указано выше:)

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Пожалуйста, дайте Awk шанс.Следующее должно быть POSIX-совместимым.

read -p "Match: " match
awk -v IGNORECASE=1 -v m="$match" '$2~m {p=1} NF>2 && $2!~m {p=0} p' file
  • $2~m {p=1} - если второе поле соответствует m, установите p в 1
  • NF>2 && $2!~m {p=0} - Если естьболее двух полей и второе не соответствует m, установите p в 0
  • p - если p не равно нулю, выведите строку, в противном случае ничего не делайте
0 голосов
/ 02 июля 2019

Если вы в порядке с awk, не могли бы вы попробовать следующее.

awk -v string="GLOBCIBSSLRDB01" '!/^ +/{flag=""} $2==string{flag=1} flag' Input_file

Вы можете изменить значение строки -v string="GLOBCIBSSLRDB01" в приведенном выше коде для поиска другой строки.Также код сравнивает его со вторым полем строк (если это другое поле), тогда вы можете изменить его.

Вывод будет следующим:

64 GLOBCIBSSLRDB01  Generic-ALUA  5001438024D29646 0:2:2
                                 5001438024D29644 1:2:1
                                 5001438024D29644 0:2:1
                                 5001438024D29646 1:2:2

Получая вдохновение от @vintnesи изменение кода для поиска нескольких хостов согласно комментариям OP (еще не проверял).

awk -v hosts="globcibsslrdb01,xyz,abc" '
BEGIN{
  split(hosts,array,",")
}
{
  val=tolower($2)
}
(val in a){
  flag=val
  p=1
}
NF>2 && val!=flag{
  p=0
}
p
'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...