Если ваш удаленный клиент работает под управлением Windows, вы можете включить переадресацию X11 в PuTTY и установить X-сервер для Windows, такой как Xming. Это позволяет вашим приложениям с графическим интерфейсом Linux интегрироваться с рабочим столом Windows, выглядя как обычные окна с локальным интерфейсом.
Если вашим удаленным клиентом является Linux, вы можете просто использовать ssh -X
.
Следующая команда awk
должна делать то, что вы хотите, если ввод в точности соответствует описанию.
(но он не выполняет никакой проверки ошибок):
awk '/\|/ {split($0, devices, "|"); next} /^$/ {print; next}
{for (i=1; i<NF; i++) printf "%s,%s|", devices[i], $i; printf "%s,%s\n", devices[NF], $NF}'
|
, разделите ее на |
s в массив под названием «устройства».
(Нам нужно использовать \ |
, потому что простой |
означает ИЛИ , как в / cat | dog /
.)
Затем перейдите к следующей
строке входных данных (т.е. не выполняйте следующие команды). |
, но без новой строки.
Затем выведите последнее поле с новой строкой, но без |
. Если вы можете использовать perl
, с модулем List :: MoreUtils
из CPAN:
$ perl -MList::MoreUtils=pairwise -F'\|' -anle '
print and next if /^$/;
@dev = @F and next if @F > 1;
print join "|", pairwise {"$a,$b"} @dev,@{[split]};
' file
abc,x|xyz,up|mno,x
abc,up|xyz,up|mno,x
abc,x|xyz,x|mno,up
abc,x|xyz,x|mno,x
abc,up|xyz,x|mno,x
Если вам не нравится использовать внешний модуль:
$ perl -F'\|' -anle '
print and next if /^$/;
@dev = @F and next if @F > 1;
@state = split;
print join "|", map {"$dev[$_],$state[$_]"} 0..$#dev;
' file