Обработка текста с помощью инструментов Unix

Если ваш удаленный клиент работает под управлением Windows, вы можете включить переадресацию X11 в PuTTY и установить X-сервер для Windows, такой как Xming. Это позволяет вашим приложениям с графическим интерфейсом Linux интегрироваться с рабочим столом Windows, выглядя как обычные окна с локальным интерфейсом.

Если вашим удаленным клиентом является Linux, вы можете просто использовать ssh -X.

-2
12.08.2014, 20:43
2 ответа

Следующая команда 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 / .) Затем перейдите к следующей строке входных данных (т.е. не выполняйте следующие команды).
  • Если строка ввода пуста, распечатайте ее (пустую строку) и перейдите к следующей строке. без выполнения следующей команды.
  • Для каждой строки, не соответствующей одному из вышеперечисленных, для каждого поля до , но не включая последнее, напечатайте его с соответствующим именем устройства и | , но без новой строки. Затем выведите последнее поле с новой строкой, но без | .
1
28.01.2020, 05:15

Если вы можете использовать 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
2
28.01.2020, 05:15

Теги

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