Переупорядочить файл, чтобы он легко читался

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

Первое имя соответствует первому MAC, первому IP и так далее. Как я могу переделать этот файл с помощью grep , awk или sed ?

 Name : WiFi 1 Name : WiFi 2 Name : WiFi 3 Name : WiFi 4 Name : WiFi 5 Name : WiFi 6 Name : WiFi 7 MAC : aa:aa:aa:aa:aa:aa MAC : bb:bb:bb:bb:bb:bb MAC : cc:cc:cc:cc:cc:cc MAC : dd:dd:dd:dd:dd:dd MAC : ee:ee:ee:ee:ee:ee MAC : ff:ff:ff:ff:ff:ff MAC : gg:gg:gg:gg:gg:gg IP : 10.0.1.0 IP : 10.0.1.1 IP : 10.0.1.2 IP : 10.0.1.3 IP : 10.0.1.4 IP : 10.0.1.5 IP : 10.0.1.6 Status : Operational Status : Operational Status : Operational Status : Operational Status : Operational Status : Operational Status : Operational Interface : X2 Interface : X2 Interface : X2 Interface : X2 Interface : X2 Interface : X2 Interface : X2 

Я бы хотел, чтобы все они выводились, как показано ниже

 Name : WiFi 1 MAC : aa:aa:aa:aa:aa:aa IP : 10.0.1.0 Status : Operational Interface : X2 

6 Solutions collect form web for “Переупорядочить файл, чтобы он легко читался”

Самосчетная версия, сезон по вкусу:

 awk ' $1!=last {n=0;last=$1} {++n;gaggle[n]=gaggle[n]"\n"$0} END { for (k in gaggle) print gaggle[k] } ' 

Для семи точек доступа с GNU sed и bash / ksh :

 for (( i = 1; i <= 7; ++i )); do sed -n "$i~7p" data echo done 

С предоставленной информацией в data это дает

 Name : WiFi 1 MAC : aa:aa:aa:aa:aa:aa IP : 10.0.1.0 Status : Operational Interface : X2 Name : WiFi 2 MAC : bb:bb:bb:bb:bb:bb IP : 10.0.1.1 Status : Operational Interface : X2 Name : WiFi 3 MAC : cc:cc:cc:cc:cc:cc IP : 10.0.1.2 Status : Operational Interface : X2 

(и т.д.)

Если мы не знаем, сколько точек доступа есть, подсчитайте строки Name :

 num="$( grep -c '^Name' data )" for (( i = 1; i <= num; ++i )); do sed -n "$i~${num}p" data echo done 

Первый синтаксис синтаксиса диапазона GNU

Сопоставьте каждый step first строки, начиная с строки.

согласно руководству GNU sed .

Еще один способ:

 num=$(grep -c ^Name inputfile) for((i=1; i <= num; i++)); do for((j=1; j < num- 1; j++)); do printf "%dp;" $((i + (j-1)*num)); done; printf "\n"; done | while read cmd; do sed -n "$cmd" inputfile; done 

Другой подход, без awk или sed , может быть причиной:

 split -a 1 -l 7 inputfile && paste -d '\n' x{a,b,c,d,e} 

Вот еще один подход в awk .

 awk '{a[(NR-1)%7]=a[(NR-1)%7]$0RS}END{for(;i<7;){print a[i++]}}' Name : WiFi 1 MAC : aa:aa:aa:aa:aa:aa IP : 10.0.1.0 Status : Operational Interface : X2 Name : WiFi 2 MAC : bb:bb:bb:bb:bb:bb IP : 10.0.1.1 Status : Operational Interface : X2 [etc] 

Этот скрипт выполнит эту работу, если я правильно понимаю требования:

 #!/usr/bin/zsh grep Name $1 > /tmp/wifinames grep MAC $1 > /tmp/wifiMAC # ... # add lines for other fields here, you can store the names of files # in an array like ['file1', file2',..], and run a for loop printing the nth line inside the # while loop below i=1 n=`wc -l /tmp/wifinames|awk '{print $1}'` # maybe you should run some tests to check if all the files # produced by grep have equal number of entries while [[ $i -le $n ]]; do # prints nth line sed "${i}q;d" /tmp/wifinames sed "${i}q;d" /tmp/wifiMAC # ... (( i = $i + 1 )) done 
  • Распечатайте n строк до match1 И строки после match1 до match2
  • Как мне искать файл для строки, а затем использовать его как переменную?
  • Найдите шаблон в файле и переместите его в новые файлы по одному
  • Почему эта команда awk не играет так же хорошо, как найти sed?
  • Техника для объединения групп последовательных линий, разделенных по шаблону
  • Как я могу использовать (sed | awk) для маскирования адреса электронной почты со звездочками типа <j ****** e @ g ***. Com>
  • Добавление строки, содержащей escape-символ с sed
  • сравнение строк с awk vs во время чтения строки
  • SED заменить после игнорирования
  • Как удалить слова, заканчивающиеся буквой S, если дубликаты без S на конце находятся в одном списке?
  • совпадение шаблонов и захват в unix
  • Linux и Unix - лучшая ОС в мире.