The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как удалить 'перевод строки'?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Как удалить 'перевод строки'?"  +/
Сообщение от Chainikk email(ok) on 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

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

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

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как удалить 'перевод строки'?"  +1 +/
Сообщение от Andrey Mitrofanov on 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
$ _

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Как удалить 'перевод строки'?"  +/
Сообщение от Chainikk email(ok) on 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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Как удалить 'перевод строки'?"  +/
Сообщение от Andrey Mitrofanov on 17-Май-10, 17:39 
может, так?
sed -n '1h;3H;12{H;g;s/\n//g;p;q}' <in.txt >>out.txt
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Как удалить 'перевод строки'?"  +/
Сообщение от Chainikk email(ok) on 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 впихнуть...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "Как удалить 'перевод строки'?"  +/
Сообщение от Andrey Mitrofanov on 17-Май-10, 19:16 
sed -n '1p;3p;12{p;q}' <in.txt |tr -d "\n" >out.txt
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "Как удалить 'перевод строки'?"  +/
Сообщение от greenwar (ok) on 17-Май-10, 20:06 
да обычный s/\n// проканает
проще на перле такой скрипт сделать
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "Как удалить 'перевод строки'?"  +/
Сообщение от phpcoder email(??) on 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 ''

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "Как удалить 'перевод строки'?"  +/
Сообщение от Андрей (??) on 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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "Как удалить 'перевод строки'?"  +/
Сообщение от Аноним (??) on 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'. Имеет смысл только с файлами в несколько мегабайт или на медленных дисках.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

10. "Ура! Удалила 'перевод строки'! :-)"  +/
Сообщение от Chainikk email(ok) on 19-Май-10, 15:08 
Спасибо огромное всем, все получилось!!

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

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

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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

11. "Удаление 'перевода строки'"  +/
Сообщение от Chainikk email(ok) on 19-Май-10, 16:51 
Все-таки окончательно сделала:
sed -n -e '1p' -e '3p' -e '12p' in.txt | xargs > out.txt

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру