Подтвердить что ты не робот

Как связать каждые две строки текстового файла с Bash?

С помощью простого bash script я создаю текстовый файл со многими строками вроде этого:

192.168.1.1
hostname1
192.168.1.2
hostname2
192.168.1.3
hostname3

Теперь я хочу переформатировать этот файл, чтобы он выглядел так:

192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3

Как мне переформатировать его таким образом? Возможно, sed?

4b9b3361

Ответ 1

$ sed '$!N;s/\n/ /' infile
192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3

Ответ 2

Здесь вариант с оболочкой:

while read first; do read second; echo "$first $second"; done

Ответ 3

Мне нравится простота этого решения

cat infile | paste -sd ' \n'

192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3

или сделать его разделенным запятой, а не разделенным пробелом

cat infile | paste -sd ',\n'

и если ваш входной файл имел третью строку, такую ​​как timestamp

192.168.1.1
hostname1
14423289909
192.168.1.2
hostname2
14423289910
192.168.1.3
hostname3
14423289911

тогда единственное изменение - добавить еще одно пространство в список разделителей

cat infile | paste -sd '  \n'

192.168.1.1 hostname1 14423289909
192.168.1.2 hostname2 14423289910
192.168.1.3 hostname3 14423289911