команда bash выводит это:
Runtime Name: vmhba2:C0:T3:L14
Group State: active
Runtime Name: vmhba3:C0:T0:L14
Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14
Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14
Group State: active
Runtime Name: vmhba2:C0:T2:L14
Group State: active
Я хотел бы передать это чему-то, чтобы это выглядело так:
Runtime Name: vmhba2:C0:T1:L14 Group State: active
Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T2:L14 Group State: active
[...]
т.е. удалить все остальные символы новой строки
Я пытался, ... |tr "\nGroup" " "
но он удалил все новые строки и съел некоторые другие письма. Благодарность
tr
полностью на основе символов: вы попросили tr удалить символы новой строки и все 'G', 'r', 'o', 'u' и 'p'.Ответы:
не могу проверить прямо сейчас, но
должен сделать это
источник
paste -d ' ' - -
вместо этого добавит пробел, если требуется)-
? Спасибоpaste
используются для конкатенации соответствующих строк из файлов:paste file1 file2 file3 ...
. Если один из аргументов «file» - «-», то строки читаются из стандартного ввода. Если есть 2 аргумента "-", тогда вставка занимает 2 строки из стандартного ввода. И так далее. Смотрите справочную страницу .Одна возможность:
Если номер строки делится поровну на 2, конец новой строки, в противном случае конец пробела.
(Проверено на: CentOS 6, GNU Awk 3.1.7)
Используя sed (см. Объяснение ):
Дальнейшее чтение:
источник
Если вы хотите использовать
sed
, нет никаких оснований для чтения всего файла в память. Вы можете объединить любую другую строку следующим образом:Используйте любой символ вместо пробела.
Вот еще один способ использования awk:
В
if/else
ручках случае , когда имеется нечетное количество строк в файле. Без этого нечетная последняя строка печатается дважды. В противном случае для сравнения вы можете сделать:источник
awk '{printf "%s", $0; $0=""; getline; print " " $0}'
Наиболее идиоматический способ сделать это
awk
заключается в следующем:Это выводит:
Чтобы объяснить это, нам нужно определить каждую из встроенных переменных:
RS
разделитель записей. По умолчанию\n
(новая строка).ORS
разделитель выходной записи. По умолчанию\n
(новая строка).FS
разделитель полей. По умолчанию(пробел).
NR
номер записи.Поскольку разделителем записей по умолчанию является новая строка, запись по умолчанию является строкой.
NR%2
является модулемNR/2
, так что это будет либо0
или1
.0
для четных и1
нечетных линий.var=condition?condition_if_true:condition_if_false
является троичным оператором.Все вместе говорят, что
ORS=NR%2?FS:RS
мы определяем разделитель выходной записи:2k + 1
, то есть в четных строках, то в качестве разделителей выходной записи устанавливаетсяFS
пробел.2k
, то есть в нечетных строках, то в качестве разделителей выходных записей устанавливаетсяRS
новая строка.Таким образом, нечетные строки заканчиваются пробелом, который затем соединяется со следующей строкой. После этой строки печатается новая строка.
Больше информации в Idiomatic awk .
источник
Это работает для меня в Linux:
Это заменяет пустое место для символа новой строки; вы должны экранировать символ новой строки, чтобы все работало правильно.
источник
В Баш:
источник
Если Perl вариант:
perl -pe 's/\n/ / if $. % 2 == 1' file
s/\n/ /
заменяет символ новой строки пробелом$.
номер строкиисточник
Как насчет использования
grep
?источник