У меня есть следующие данные, и я должен поместить все это в одну строку.
У меня есть это:
22791
;
14336
;
22821
;
34653
;
21491
;
25522
;
33238
;
Мне нужно это:
22791;14336;22821;34653;21491;25522;33238;
Никакие из этих команд не работают отлично.
Большинство из них позволяет данным как это:
22791
;14336
;22821
;34653
;21491
;25522
tr -d '\n' < yourfile.txt
Edit:
Если ни одна из команд, опубликованных здесь, не работает, значит, у вас есть что-то, кроме новой строки, разделяющей поля. Возможно, в файле есть окончания строк DOS/Windows (хотя я ожидаю, что решения Perl будут работать даже в этом случае)?
Попробуйте:
tr -d "\n\r" < yourfile.txt
Если это не сработает, тогда вам придется более внимательно изучить ваш файл (например, в шестнадцатеричном редакторе), чтобы выяснить, какие символы в нем есть, которые вы хотите удалить.
Я бы сделал это с помощью awk, например
awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt
(недостаток в том, что a «накапливается» в памяти).
РЕДАКТИРОВАТЬ
Забыл о printf! Так же
awk '/[0-9]+/ { printf "%s;", $0 }' file.txt
или, вероятно, лучше, то, что уже было дано в других ответах, использующих awk.
tr -d '\n' < file.txt
Или
awk '{ printf "%s", $0 }' file.txt
Или
sed ':a;N;$!ba;s/\n//g' file.txt
На этой странице здесь есть множество других методов для удаления новой строки.
отредактировано, чтобы удалить жестокое обращение с кошками :)
perl -p -i -e 's/\R//g;' filename
Должен выполнить свою работу.
Если данные находятся в файле file.txt, то:
echo $(<file.txt) | tr -d ' '
' $ (
22791;14336;22821;34653;21491;25522;33238;
Использование man 1 ed:
# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed
ed -s file <<< $'1,$j\n,p' # print to stdout
ed -s file <<< $'1,$j\nwq' # in-place edit
$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output