Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Как склеить файлы?  (Прочитано 8607 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Leopard

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Как склеить файлы?
« : 28 Апреля 2009, 19:17:50 »
Есть группа файлов name1.txt, name2.txt, .... namen. txt  и два текстовых файла beg и ends

Надо, чтобы появилась группа файлов вида:
cat beg name1.txt ends > name1.dat
cat beg name2.txt ends > name2.dat
....
cat beg namen.txt ens > namen.dat
То есть к каждому файлу из списка приписать "заколовок" и "конец".

Логика подсказывает, что надо что-то из циклов (или нет?). Изыскания по мануалам и личное творчество дали вот такой результат:
Цитировать
for i in $*'*.txt'
 do
  cat beg $i ends > $i".dat";
 done

Выдает, только не так, как надо... Что тут подправить, чтобы заработало?
Про руки не надо! Отрастут - выпрямятся!

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Как склеить файлы?
« Ответ #1 : 28 Апреля 2009, 19:30:13 »
Leopard,
for i in {1..n}; do cat beg name$i.txt ends > name$i.dat; done

Оффлайн Leopard

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #2 : 28 Апреля 2009, 19:42:53 »
Так тоже что-то не работает...
Вот что получилось:
Цитировать
alina@alina-laptop:~/Temp/shellexp$ ls
beg  ends  my.sh  my.sh~  name1.txt  name2.txt
alina@alina-laptop:~/Temp/shellexp$ cat my.sh
for i in {1..2}; do cat beg name$i.txt ends > name$i.dat; done

alina@alina-laptop:~/Temp/shellexp$ sh my.sh
cat: name{1..2}.txt: No such file or directory
alina@alina-laptop:~/Temp/shellexp$ ls
beg  ends  my.sh  my.sh~  name{1..2}.dat  name1.txt  name2.txt
alina@alina-laptop:~/Temp/shellexp$ cat name\{1..2\}.dat
content_of_beg
content_of_ends
alina@alina-laptop:~/Temp/shellexp$ cat beg
content_of_beg
alina@alina-laptop:~/Temp/shellexp$ cat ends
content_of_ends
alina@alina-laptop:~/Temp/shellexp$

Про руки не надо! Отрастут - выпрямятся!

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #3 : 28 Апреля 2009, 20:32:00 »
for i in {1..n}; do cat beg name$i.txt ends > name$i.dat; done

Можно немного изменить на:
DIR=new; mkdir $DIR; for i in $(ls | grep "name.\{1,\}\.txt"); do cat beg $i ends > $DIR/$i; done;

Здесь измененные файлы сохранятся в каталоге "new". Но можно изменить по вкусу.

update: немного изменил код.
« Последнее редактирование: 28 Апреля 2009, 22:11:01 от unimix »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Как склеить файлы?
« Ответ #4 : 28 Апреля 2009, 22:17:54 »
Так тоже что-то не работает...
Руки-с...  :P

Вот что получилось:
[...]
alina@alina-laptop:~/Temp/shellexp$ sh my.sh
[...]
bash!

Проверка:
arcfi@arcfi-laptop:~$ for i in {1..5}; do echo "cat beg name$i.txt ends > name$i.dat"; done
cat beg name1.txt ends > name1.dat
cat beg name2.txt ends > name2.dat
cat beg name3.txt ends > name3.dat
cat beg name4.txt ends > name4.dat
cat beg name5.txt ends > name5.dat
« Последнее редактирование: 28 Апреля 2009, 22:20:32 от ArcFi »

Оффлайн Leopard

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #5 : 29 Апреля 2009, 06:10:12 »
Спасибо, проблема решена - оба варианта идеально подходят.



Про руки не надо! Отрастут - выпрямятся!

Оффлайн niki5712

  • Любитель
  • *
  • Сообщений: 53
  • happiness
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #6 : 27 Июля 2009, 21:11:38 »
А как склеить просто 2 файла и сохранить результат в первом файле не создавая новых файлов?
Laptop Toshiba Satellite A200-1J0.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Как склеить файлы?
« Ответ #7 : 27 Июля 2009, 21:51:18 »
А как склеить просто 2 файла и сохранить результат в первом файле не создавая новых файлов?
cat file2 >> file1 && rm file2

Оффлайн niki5712

  • Любитель
  • *
  • Сообщений: 53
  • happiness
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #8 : 28 Июля 2009, 12:38:49 »
Огромное спасибо!  :D Ты прав, это как раз то что нужно.

Пользователь решил продолжить мысль 28 Июля 2009, 12:49:03:
Только вот что - с файлом xorg.conf почему-то не работает:
$ sudo cat /home/niki/tmp/Xreset.txt >> /etc/X11/xorg.conf
bash: /etc/X11/xorg.conf: Permission denied
Почему в разрешении отказано? Прав не хватает? Я же с sudo пишу все же нормально должно быть?
« Последнее редактирование: 28 Июля 2009, 12:49:03 от niki5712 »
Laptop Toshiba Satellite A200-1J0.

Оффлайн Garfeild

  • Активист
  • *
  • Сообщений: 744
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #9 : 28 Июля 2009, 12:55:47 »
sudo распространяется только на первую команду до ">>"

Оффлайн niki5712

  • Любитель
  • *
  • Сообщений: 53
  • happiness
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #10 : 28 Июля 2009, 14:42:02 »
И как тогда надо писать, чтобы на обе распространилось? su, или можно обойтись и без него?
« Последнее редактирование: 28 Июля 2009, 15:25:35 от niki5712 »
Laptop Toshiba Satellite A200-1J0.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #11 : 28 Июля 2009, 15:23:32 »
sudo bash -c " команда со всеми >,< и | "
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Garfeild

  • Активист
  • *
  • Сообщений: 744
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #12 : 28 Июля 2009, 16:04:15 »
Вывзывается bash, которому передается команда записанная в ковычках. Естественно через sudo.

Оффлайн niki5712

  • Любитель
  • *
  • Сообщений: 53
  • happiness
    • Просмотр профиля
Re: Как склеить файлы?
« Ответ #13 : 28 Июля 2009, 16:12:00 »
А по подробнее  :) ? Что делает опция 'c'? (Извиняюсь за то что я  :idiot2: )
« Последнее редактирование: 29 Июля 2009, 13:24:28 от niki5712 »
Laptop Toshiba Satellite A200-1J0.

Oni-chan

  • Гость
Re: Как склеить файлы?
« Ответ #14 : 28 Июля 2009, 16:15:28 »
а man sudo почитать религия не позволяет?

Цитировать
"-c"
    Параметр -c (класс) заставляет sudo выполнить определенную команду с ограничением ресурсов, свойственным указанному классу пользователя. Параметр класс может быть либо именем класса, указанным в /etc/login.conf, или знаком -. Указание класс с помощью - означает, что команда будет выполнена с учетом прав того пользователя, от имени которого эта команда выполняется. Если параметр класс указывает на текущий класс пользователя, то команда должна быть выполнена от имени root, или команда sudo должна выполняться из оболочки суперпользователя (root). Этот параметр доступен с BSD-классом входа в систему, где sudo был сконфигурирован с параметром --with-logincap.

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.