He desarrollado collectnode
, que usa el protocolo winrm
para conectarse con Windows.
primero :crea un archivo de hosts:
# cat hosts.file
[group1:vars]
nodetype=windows
[group1]
server1
server2
server3
server4
server5
segundo :configurar la credencial en CollectNode
# collectnode --configure
Do you want to change the localhost User ? [y/n]: n
Do you want to change the UNIX/LINUX User used the connect to the servers? [y/n]: n
Do you want to change the WINDOWS User used the connect to the servers? [y/n]: y
Enter user name: Administrator
Enter password:
Enter domain|realm [none]: none
Enter transport mode (basic|ntlm|kerberos) [kerberos]: ntlm
Current path: /var/log/
Do you want to change the current path for log file? [y/n]: n
tercero :Ejecute cualquier comando que necesite en estos servidores:
# collectnode --file hosts.file --command='whatever command you need'
https://collectnode.com/executing-commands-on-remote-windows-from-linux-terminal/
Это можно сделать с помощью идиоматического awk:
awk '$1=$1' RS= OFS= infile
Выход:
timestamp=201706291035.....;line 2;line 3;line 4;line 5;line 6;line 7;
timestamp=201706291038.....;line 2;line 3;line 4;line 5;line 6;
Здесь много всего упаковано. В основном есть три шага:
RS
). FS
). OFS
)используется в качестве разделителя полей. Когда awk анализирует входные данные, действует несколько неявных правил. Данные считываются по одной записи за раз, записи разделяютсяRS
(по умолчанию\n
). Когда RS
пусто, как в приведенном выше примере, пустая строка разделяет записи. Таким образом, каждый раздел считывается как запись.
Чтобы заставить awk
заменить FS
на OFS
, мы устанавливаем первое поле $1
на себя.
Как отметил steeldriver , ОП хочет удалить конечные точки с запятой -. Беззастенчиво скопировано:
awk '{ sub(/;$/,"",$NF); $1=$1 } 1' RS= OFS= infile
Если перед отметкой времени есть пустая строка, вы можете использовать простую
perl -pe 'chomp unless /^$/'
Если новых строк нет, вам нужно запомнить предыдущую строку.
perl -pe 'chomp; print "\n" if $. > 1 && /^timestamp=/; print }{ print "\n"'
Самый короткий ответ для варианта использования будет:
awk '$1=$1' > "single.txt" RS= test.txt
Поскольку RS
объяснил Тор, нам нужно только RS
здесь, чтобы получить наш результат.
Это можно сделать следующим образом:
perl -lF';\n?' -00ne '$,=";"; print @F' yourfile
timestamp=201706291035.....;line 2;line 3;line 4;line 5;line 6;line 7
timestamp=201706291038.....;line 2;line 3;line 4;line 5;line 6
Опции Perl
a)-l
=> ORS="\n" + RS = "\n"
b)-F';\n?'
=> сделает FS точкой с запятой, за которой следует необязательный перевод строки.
c)-00
=> сделает RS=, тем самым включив режим абзаца.
d)-n
=> включит неявное чтение файла -в + явная печать.
Main:$,=;
сделает OFS точкой с запятой, @F
— это поля, которые были вырезаны из текущей записи $_
на основе FS
.