Как преобразовать данные, разделенные вертикальной чертой, в данные вертикального формата

Как системному администратору, мне иногда приходилось управлять машинами, которые находятся за сотни или тысячи миль от меня, и все было в порядке, пока я мог подключиться по ssh. удаленный человек с разным уровнем знаний Unix по телефону (и в чате, если мне повезет ). Так что на самом деле довольно похожая ситуация.

Некоторые отличия:

  • Существуют подходы к удаленному управлению -или -диапазона или удаленному управлению без -ОС -. Это, вероятно, не относится к вашей ситуации, и вы проигнорируете их (выходы для удаленной перезагрузки, последовательные консоли, IP KVM, IPMI и т. д.)

  • Моя цель, как правило, -восстановить мою способность управлять машиной, после чего я беру на себя управление; ваша цель, вероятно, другая.

Во всяком случае, некоторые общие подходы:

  • Если это вообще возможно, установите метод визуальной коммуникации. Использование сотового -телефона для создания скриншотов (как на реальных изображениях монитора )и отправки их друг другу работает. И вам так намного легче заметить опечатку. Если вы проводите презентацию, пишите команды (крупным шрифтом! )на слайдах. Или на раздаточных материалах.
  • Текстовый -основанный на (чате/IRC/и т.д. )метод связи тоже отличный, тогда вам больше не нужно проговаривать команду по телефону. Электронная почта тоже работает, по крайней мере, до тех пор, пока задержка не слишком велика. (Электронная почта также позволяет указать шрифт пишущей машинки ). Можно заставить работать даже SMS (текстовые сообщения мобильного телефона ).
  • Если вам нужно заставить их делать много, вы сделаете это намного проще, если сначала сосредоточитесь на улучшении работы метода связи.
  • Четко произносите команды. Скажите человеку, что именно печатать; ваш пример «в кавычках» — плохая идея — вместо этого попросите человека ввести двойную -кавычку, когда это необходимо.Произнесение «завиток пробел тире заглавная буква L» занимает -время, но гораздо меньше времени, чем все время, которое вы потратите на устранение ошибки от непонимания человека.
  • Иногда длинные варианты лучше — dash dash executeлегче понять, чем dash e(, легко неправильно понятое вместо -cили даже-3). Когда вам нужно расшифровать буквы, используйте фонетический алфавит НАТО или аналогичный.
  • Скажите человеку, что вы собираетесь делать. «Я скажу пробел, если вам нужно набрать его, в противном случае, пожалуйста, не делайте этого. И не нажимайте ввод, пока я не скажу. Все будет в нижнем регистре, если я не скажу «заглавная» перед ним».
  • Если команда вообще опасна или возможна опечатка, попросите ее прочитать вам. Задайте им вопросы: «Есть ли пробел между тире и буквой о?» чтобы убедиться, что это правильно.
  • Вы говорите, вы можете использовать тон/громкость/паузы (выделение )чтобы выделить что-либо (выделено курсивом в примере)

Итак, я бы предложил что-то вроде:

Me: curl space dash capital ell space example dot see [optionally you could put as in Charlie here] oh em slash file dot tee ex tee space dash oh space double-quote path slash to slash something space with space the word spaces (pause) dot tee ex tee double-quote

Them: ok

Me: Just to confirm, you've got the word spaces, plural, typed out before the dot tee ex tee?

Them: yeah

Me: And the dash el is capital, but the dash oh is lowercase, right?

Them: yep

Me: ok, press enter.

0
28.12.2019, 09:38
3 ответа
tr '|' '\n'

преобразует каждую вертикальную черту в новую строку и должен помочь.

echo "143|2345|3456|4567|2345|3457|2019-12-28 12:00:01|2019-12-28" | tr '|' '\n'

Или, может быть, в вашем случае вы ищете

cat file | tr '|' '\n' > newfile
1
28.01.2020, 02:29

Использование ваших исходных данных и GNUhead:

$ tr '|' '\n' <demo.txt | head -n -2
143
2345
3456
4567
2345
3457

Команда trпросто изменяет символы|-на новые строки. Обратите внимание, что trсчитывается только со стандартного ввода, поэтому вам нужно будет перенаправить на него.

Если GNU headполучает отрицательное число строк, оно обрезает это количество строк с конца данных.

В качестве альтернативы, одним вызовомsed:

$ sed 's/\(|[^|]*\)\{2\}$//; y/|/\n/' demo.txt
143
2345
3456
4567
2345
3457

Здесь подстановка удалит последние два|-поля с разделителями, сопоставив два|-символа и строки после каждого, затем команда yзаменит каждое оставшееся |на новую строку (просто как trв первом решении ).

С sed -Eэто может быть немного более читаемым (обратите внимание, что теперь мы должны экранировать один из|-символов):

sed -E 's/(\|[^|]*){2}$//; y/|/\n/' demo.txt
0
28.01.2020, 02:29

Для работы с несколькими строками и переменным количеством полей удаляется col1 и два последних столбца, а оставшиеся столбцы располагаются вертикально.

awk '-F|' '{ for (f = 2; f <= NF - 2; ++f) print $(f); }' data.txt
1
28.01.2020, 02:29

Теги

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