Отключите брандмауэр, чтобы обнаружить проблему с брандмауэром или добавить правило принять UDP на порте 53. Мог также позволить TCP на порте 53. Попытайтесь сохранить привязь на изменениях конфигурации и сохранить резервное копирование всех важных конфигурационных файлов.
с SED
:
sed '$!N;$!N;y/\n/:/'
Хотя я думаю, что это менее общее, чем n линии , чем должно быть. Если количество строк, которые вы хотите, всегда будут в конце поля, подобного тому, то:
sed '$q;N;/1.$/!s/\(..*\)\(\n\)/\2\1:/;//P;D
' <<\INPUT
field1a
field1b
field2b
field1c
INPUT
field1a
field1b:field2b
field1c
... который стекирует линии после того, как это заканчивается 1
, то любой один символ до Он сталкивается с другим, заканчивающимся с 1
, чем что-то еще.
Это будет работать для любого количества происходящих полей, но вы можете сделать ...
sed '.../[^0-9]1.$/!...'
... Если вы попадаете в несколько цифр.
paste -sd '::\n' file
Или:
awk '{ORS=NR%3?":":"\n";print}' < file
(обратите внимание на разницу, если количество записей на входе не является кратным из 3).
Для форматирования вывода можно использовать printf
IFS='
' # split on sequences of newline characters
set -f # disable globbing
printf "%s:%s:%s\n" $(cat file)
(обратите внимание, что при этом пропускаются пустые строки).
Или sed
(если хотите)
sed '$!N;$!N;s/\n/:/g' file
вставьте
: paste -d: - - - <file
Объедините файл, вставив данные в 3 столбца ( - - -
) с использованием разделителя двоеточия:
perl -pe 'if($.%3){s/\n/:/;}' file
с параметром -p
выполняется печать по умолчанию. Все, что мы здесь делаем, это если номер строки равен модулю 3 (% 3
), заменим символ новой строки ( \ n
) двоеточием (:
).
xargs
и awk
: xargs -L 3 < file | awk '$1=$1' OFS=:
Аргумент -L
в xargs
сообщает, сколько строк нужно соединить. И awk
помещает разделитель выходного поля (OFS) из пробела (по умолчанию) в разделитель двоеточия (:
).
awk
: awk 'NR%3{printf "%s:",$0;next}{print;}' file
Распечатайте модуль трех строк, используя printf (без новой строки) с двоеточием, и выполните обычную печать для следующей строки, используя print (которая по умолчанию помещает новую строку) .
Если у меня всего несколько сотен или меньше строк, или если количество полей в группе меняется, тогда vi работает для меня очень хорошо.
В vi, если я хочу объединить текущую и следующие 2 строки (всего 3 строки текста), то ...
3J
В этот момент мой курсор находится на объединенной строке, поэтому я перехожу к следующий ...
j
Я делаю ту же модификацию относительно текущей строки, используя точку ...
.
И снова ...
j
.
Ой! В последней группе было 4 строки, а не 3. Я отменяю последнюю модификацию ...
u
и сделай это снова, прямо сейчас ...
4J
Далее! ...
j
... И так далее.
Обратите внимание: если вы собираетесь сделать это для загрузки своей базы данных с 360 миллионами полей или если ваши последовательные поля обычно 3, с несколькими группами по 4 и, возможно, редкой группой из 5 или 6, тогда вы будете возможно, вы захотите вынести загадочный синтаксис, состоящий в том, чтобы вывести себя из цикла, упорядочить данные по шагам и, возможно, написать программу, чтобы протестировать ее и предупредить вас об ошибках.
Но если это небольшая разовая работа, то я просто переношу несколько минут скуки и использую vi.