Автор Тема: Помощ за bash script  (Прочетена 2715 пъти)

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Помощ за bash script
« -: May 10, 2009, 23:20 »
Здравейте приятели. Имам следния проблем.  Имам текстов файл състоящ се от хиляди редове. Опитвам се да създам bash скрипт, който прочита редовете от този голям файл, като стигне до празен ред, да прекъсва четенето и да създаде файл с име като първия ред на текущия абзац...

Ако някой знае как да стане на друг език, няма проблеми, просто ми е нужно нещо автоматизирано, така че не е проблем на какъв език ще е.

Ето и един пример:

Голям_Файл.txt:
Код:
Name: Ivan Ivanov
EGN: 12345678910
Phone number: 0888123456
City: Sofia
Street: Ala-Bala 1

Name: Petyr Ivanov
EGN: 12345678910
Phone number: 0888123456
City: Plovdiv
Street: Ala-Bala 2

И скрипта да направи това:
Започва да чете Голям_Файл.txt, и като срещне празния ред, да създаде файл с име като първия ред на текущия абзац или в случая -  Ivan Ivanov. След това да продължи да чете файла и като срещне празен ред, отново да създаде файл с име като първия ред на текущия абзац - този път с име Petyr Ivanov.

Ето и примерите:
Голям_Файл.txt:
Код:
Name: Ivan Ivanov
EGN: 12345678910
Phone number: 0888123456
City: Sofia
Street: Ala-Bala 1

Name: Petyr Ivanov
EGN: 12345678910
Phone number: 0888123456
City: Plovdiv
Street: Ala-Bala 2

И резултата:

Ivan Ivanov.txt
Код:
Name: Ivan Ivanov
EGN: 12345678910
Phone number: 0888123456
City: Sofia
Street: Ala-Bala 1

Petyr Ivanov.txt
Код:
Name: Petyr Ivanov
EGN: 12345678910
Phone number: 0888123456
City: Plovdiv
Street: Ala-Bala 2

Бихте ли ми помогнали?
Благодаря предварително!
« Последна редакция: May 11, 2009, 00:04 от LinuxFanUNIX »
Активен

shadowx

  • Напреднали
  • *****
  • Публикации: 99
  • Distribution: Slackware
  • Window Manager: Gnome
    • Профил
Re: Помощ за bash script
« Отговор #1 -: May 10, 2009, 23:32 »
#!/bin/bash

file=$1
name=""

while read line ; do
       y =`echo $line | awk '{print $1}'`

       if $y == "Name:" ; then
              name=`echo $line | awk '{print $2,3}' | tr " " "_"`
              name="$name.txt"
              echo $line > $name
       else
              echo $line >> $name
       fi
done < $file
« Последна редакция: May 10, 2009, 23:35 от shadowx »
Активен

There he goes. One of God's own prototypes. A high-powered mutant of some kind never even considered for mass production. Too weird to live, and too rare to die.

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Re: Помощ за bash script
« Отговор #2 -: May 11, 2009, 00:04 »
#!/bin/bash

file=$1
name=""

while read line ; do
       y =`echo $line | awk '{print $1}'`

       if $y == "Name:" ; then
              name=`echo $line | awk '{print $2,3}' | tr " " "_"`
              name="$name.txt"
              echo $line > $name
       else
              echo $line >> $name
       fi
done < $file
Просто не мога да разбера, как толкова бързо ми отговори... Супер си. Благодаря ти много! Жив и здрав да си!
Браво!
Активен

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
Re: Помощ за bash script
« Отговор #3 -: May 12, 2009, 11:06 »
С awk:

Код:
awk -F': |\n' '{print>$2".txt"}' RS= big_file

За да избегнеш грешката too many open files при някои стари awk версии:

Код:
awk -F': |\n' '{
  f && close(f)
  print > (f = $2 ".txt")
  }' RS= big_file
« Последна редакция: May 12, 2009, 11:10 от radoulov »
Активен

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Re: Помощ за bash script
« Отговор #4 -: May 15, 2009, 23:05 »
С awk:

Код:
awk -F': |\n' '{print>$2".txt"}' RS= big_file

За да избегнеш грешката too many open files при някои стари awk версии:

Код:
awk -F': |\n' '{
  f && close(f)
  print > (f = $2 ".txt")
  }' RS= big_file
Мерси. И това ще се пробва. Да си жив и здрав!  ;)
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Помощ за bash script
Хардуерни и софтуерни проблеми
Ivan_storm 4 3369 Последна публикация May 30, 2005, 12:31
от rpetrov
bash script за праверяване на процес
Общ форум
sys7em 8 3911 Последна публикация Aug 09, 2005, 15:39
от
Bash script и извеждането му
Web development
martien 3 3130 Последна публикация Nov 02, 2006, 11:55
от morbid_viper
Bash script за следене съдържанието на директория
Общ форум
mishot 9 4121 Последна публикация Mar 05, 2008, 00:38
от maniac
Bash script
Общ форум
vikktor 14 5192 Последна публикация Mar 04, 2009, 23:38
от CappY