Ответ 1
$ sed '$!N;s/\n/ /' infile
192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3
С помощью простого 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
?
$ sed '$!N;s/\n/ /' infile
192.168.1.1 hostname1
192.168.1.2 hostname2
192.168.1.3 hostname3
Здесь вариант с оболочкой:
while read first; do read second; echo "$first $second"; done
Мне нравится простота этого решения
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