URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8737
[ Назад ]

Исходное сообщение
"Как удалить 'перевод строки'?"

Отправлено Chainikk , 17-Май-10 15:32 
Есть большой файл с данными in.txt, скачивается на сервер каждые 15 минут.

Скрипт на csh вытаскивает из него только нужные 3 строки - 1-ую, 3-ю и 12-ю,
и записывает в файл out.txt:

#!/bin/csh -x
sed -n -e '1p' -e '3p' -e '12p' in.txt >> out.txt

А вот как сделать, чтоб эти строки записывались подряд все в одну,
а не писались одна под другой,
то есть как удалять символ "перевода строки" в конце каждой?

Никак не могу добиться, будучи непрофессионалом:-(, буду оччень благодарна за помощь.


Содержание

Сообщения в этом обсуждении
"Как удалить 'перевод строки'?"
Отправлено Andrey Mitrofanov , 17-Май-10 15:43 
>Скрипт на csh вытаскивает из него только нужные 3 строки - 1-ую,

Вообще говоря, скрипт практически на sed-е.

>3-ю и 12-ю,
>А вот как сделать, чтоб эти строки записывались подряд все в одну,

$ seq 1 5
1
2
3
4
5
$ seq 1 5|sed -n 'N;N;s/\
//g;p;q'
123
$ _

А, не, не то...

$ seq 1 15|sed -n '1H;3H;12{H;g;s/\
//g;p;q}'
1312
$ _


"Как удалить 'перевод строки'?"
Отправлено Chainikk , 17-Май-10 16:21 
>
>Вообще говоря, скрипт практически на sed-е.
>

Ну да, в общем:-)
>
>$ seq 1 15|sed -n '1H;3H;12{H;g;s/\
>//g;p;q}'
>1312
>$ _

Спасибо. Попробовала. Пока не очень получилось...
Не поняла, а куда тут добавлять имя файла, из которого считывать, и в который записывать.
Попробовала

#!/bin/csh -x
sed -n '1H;3H;12{H;g;s/\
//g;p;q}' in.txt >> out.txt

запускаю на выполнение этот файл а мне в ответ -
sed: -e expression #1, char 15: Unterminated `s' command


"Как удалить 'перевод строки'?"
Отправлено Andrey Mitrofanov , 17-Май-10 17:39 
может, так?
sed -n '1h;3H;12{H;g;s/\n//g;p;q}' <in.txt >>out.txt

"Как удалить 'перевод строки'?"
Отправлено Chainikk , 17-Май-10 18:28 
>может, так?
>sed -n '1h;3H;12{H;g;s/\n//g;p;q}' <in.txt >>out.txt

Так тоже не удаляет:-(
Наша вот еще:
tr -d '\n'

Тока пока не понимаю куда его после sed'a впихнуть...


"Как удалить 'перевод строки'?"
Отправлено Andrey Mitrofanov , 17-Май-10 19:16 
sed -n '1p;3p;12{p;q}' <in.txt |tr -d "\n" >out.txt

"Как удалить 'перевод строки'?"
Отправлено greenwar , 17-Май-10 20:06 
да обычный s/\n// проканает
проще на перле такой скрипт сделать

"Как удалить 'перевод строки'?"
Отправлено phpcoder , 18-Май-10 06:53 
>$ seq 1 5
>1
>2
>3
>4
>5
>$ seq 1 5|sed -n 'N;N;s/\
>//g;p;q'
>123

Есть способ проще (с)

seq 1 5 | paste -s -d ''


"Как удалить 'перевод строки'?"
Отправлено Андрей , 17-Май-10 21:40 
$ seq 1 5
1
2
3
4
5

$ seq 1 5 | xargs
1 2 3 4 5

для вашего случая:
sed -n -e '1p' -e '3p' -e '12p' in.txt | xargs > out.txt


"Как удалить 'перевод строки'?"
Отправлено Аноним , 17-Май-10 22:43 
> | xargs

ЕМНИП, у xargs ограничение на размер строки - ARG_MAX

лучше использовать команду `y'.

sed -n -e 'y/\n//' -e '1p' -e '3p' -e '12p' in.txt >> out.txt

тут можно сэкономить ресурсы, если не считывать весь файл, а остановить чтение файла после 12-ой строки: -e '12q'. Имеет смысл только с файлами в несколько мегабайт или на медленных дисках.


"Ура! Удалила 'перевод строки'! :-)"
Отправлено Chainikk , 19-Май-10 15:08 
Спасибо огромное всем, все получилось!!

Перебрала ВСЕ указанные Вами варианты, в результате сделала команду:

sed -n -e '1p' -e '3p' -e '12q' in.txt | xargs >>out.txt

Идея останавливать чтение файла после 12 строки мне очень понравилась, сделала -e '12q'. Нечего сервер зря гонять, у него и так задач много:-)
А то что у xargs ограничение на размер строки, это мне оказалось не критично. Все читается.

Теперь получается отличный файл с данными! Данные поступают каждые 15 минут, и за пару месяцев большой файл бы накапливался, длинный как кишка, а так в 3 раза короче. Люблю когда все элегантно:-)!!


"Удаление 'перевода строки'"
Отправлено Chainikk , 19-Май-10 16:51 
Все-таки окончательно сделала:
sed -n -e '1p' -e '3p' -e '12p' in.txt | xargs > out.txt