С sed
вы можете использовать:
sed -e 'H;${x;s/\n/,/g;s/^,//;p;};d'
H
добавляет пространство шаблона к пространству удержания (сохраняя текущую строку в пространстве удержания).${...}
окружает действия, которые применяются только к последней строке.Этими действиями являются: x
удержание свопа и пробел в образце;s/\n/,/g
заменить встроенные символы новой строки запятыми;s/^,//
удалить начальную запятую (в начале пробела есть новая строка);и p
печать.d
удаляет пространство шаблона - без печати.
Вы также можете использовать, поэтому:
sed -n -e 'H;${x;s/\n/,/g;s/^,//;p;}'
-n
подавляет печать по умолчанию, поэтому окончательный d
больше неНужен.
В этом решении предполагается, что окончания строки CRLF являются локальным окончанием собственной строки (поэтому вы работаете в DOS), и поэтому sed
будет генерировать локальную конечную строку в операции печати.Если у вас есть ввод в формате DOS, но вы хотите вывод в формате Unix (только LF), то вам придется работать немного усерднее - но вам также необходимо четко указать это в вопросе.
У меня это работало нормальнов MacOS X 10.6.5 с номерами 1..5, 1..50 и 1..5000 (23 893 символа в одной строке вывода);Я не уверен, что хотел бы продвинуть это сильнее, чем это.