У меня есть файл, который имеет данные в одном столбце и 200 строк (200 * 1).
Я хочу получить эти данные в одной строке с разделенной запятой.
Файл примера
Paul
Pammy
Jacob
Robin
Вывод
Paul, Pammy, Jacob, Robin
sed
:sed ':a;{N;s/\n/, /};ba' INPUT_FILE
Я не эксперт по sed
, но это то, что означает вышеупомянутый однострочный:
:a
:label
команда :label
создает именованный ярлык a
. Это при использовании с ветвями ba
на этикетке. Это полезно для создания циклов и перехода в конец сценария для печати текущего пространства шаблонов.
N
N
просто добавляет следующую строку в пространство шаблонов с помощью \n
.
s/\n/,/
Поскольку новая строка была добавлена к шаблону с \n
, мы используем эту замену, чтобы заменить \n
с А ,
и space
в соответствии с требованиями ОП.
[jaypal:~/Temp] cat file
Paul
Pammy
Jacob
Robin
[jaypal:~/Temp] sed ':a;{N;s/\n/, /};ba' file
Paul, Pammy, Jacob, Robin
awk
:$ awk -v ORS=, 1 file.txt | sed 's/,$/\n/'
Paul,Pammy,Jacob,Robin
-v ORS=,
установить выходную запись, разделенную ,
1
ИСТИНА, поэтому распечатывайте каждую записьsed 's/,$/\n/'
remove end ,
sed
:$ sed -n '1h;1!H;${g;s/\n/,/gp}' file.txt
Paul,Pammy,Jacob,Robin
-n
подавляет выход1h
помещает первую строку в пространство-держатель1!H
добавить второй ~ последние строки в пространство удержания${...}
do... против последней строкиg
получить все из холдингаs/\n/,/g
заменить \n
на ,
p
распечатываютtr:
$ tr '\n' ',' <file.txt | sed 's/,$/\n/'
cat
из tr
версии и просто сделать tr '\n' ',' < file.txt | sed 's/,$/\n/'
это, похоже, работает, использует команду "tr" для unix/linux
tr '\n', ',' < yourfile
В Python
', '.join(open("yourinputfile").read().splitlines())
В Баше
cat test.txt|xargs -I {} echo -n {},
В Perl:
perl -pe 'chomp; print ", " if $. - 1'
Это может сработать для вас:
paste -d, -s file.txt
sed
. :П