Есть большой файл с данными 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А вот как сделать, чтоб эти строки записывались подряд все в одну,
а не писались одна под другой,
то есть как удалять символ "перевода строки" в конце каждой?Никак не могу добиться, будучи непрофессионалом:-(, буду оччень благодарна за помощь.
>Скрипт на 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
$ _
>
>Вообще говоря, скрипт практически на 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
может, так?
sed -n '1h;3H;12{H;g;s/\n//g;p;q}' <in.txt >>out.txt
>может, так?
>sed -n '1h;3H;12{H;g;s/\n//g;p;q}' <in.txt >>out.txtТак тоже не удаляет:-(
Наша вот еще:
tr -d '\n'Тока пока не понимаю куда его после sed'a впихнуть...
sed -n '1p;3p;12{p;q}' <in.txt |tr -d "\n" >out.txt
да обычный s/\n// проканает
проще на перле такой скрипт сделать
>$ 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 ''
$ 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
> | xargsЕМНИП, у xargs ограничение на размер строки - ARG_MAX
лучше использовать команду `y'.
sed -n -e 'y/\n//' -e '1p' -e '3p' -e '12p' in.txt >> out.txt
тут можно сэкономить ресурсы, если не считывать весь файл, а остановить чтение файла после 12-ой строки: -e '12q'. Имеет смысл только с файлами в несколько мегабайт или на медленных дисках.
Спасибо огромное всем, все получилось!!
Перебрала ВСЕ указанные Вами варианты, в результате сделала команду:sed -n -e '1p' -e '3p' -e '12q' in.txt | xargs >>out.txt
Идея останавливать чтение файла после 12 строки мне очень понравилась, сделала -e '12q'. Нечего сервер зря гонять, у него и так задач много:-)
А то что у xargs ограничение на размер строки, это мне оказалось не критично. Все читается.Теперь получается отличный файл с данными! Данные поступают каждые 15 минут, и за пару месяцев большой файл бы накапливался, длинный как кишка, а так в 3 раза короче. Люблю когда все элегантно:-)!!
Все-таки окончательно сделала:
sed -n -e '1p' -e '3p' -e '12p' in.txt | xargs > out.txt