Титла: Помощ за bash script Публикувано от: LinuxFanUNIX в May 10, 2009, 23:20 Здравейте приятели. Имам следния проблем. Имам текстов файл състоящ се от хиляди редове. Опитвам се да създам bash скрипт, който прочита редовете от този голям файл, като стигне до празен ред, да прекъсва четенето и да създаде файл с име като първия ред на текущия абзац...
Ако някой знае как да стане на друг език, няма проблеми, просто ми е нужно нещо автоматизирано, така че не е проблем на какъв език ще е. Ето и един пример: Голям_Файл.txt: Код: Name: Ivan Ivanov И скрипта да направи това: Започва да чете Голям_Файл.txt, и като срещне празния ред, да създаде файл с име като първия ред на текущия абзац или в случая - Ivan Ivanov. След това да продължи да чете файла и като срещне празен ред, отново да създаде файл с име като първия ред на текущия абзац - този път с име Petyr Ivanov. Ето и примерите: Голям_Файл.txt: Код: Name: Ivan Ivanov И резултата: Ivan Ivanov.txt Код: Name: Ivan Ivanov Petyr Ivanov.txt Код: Name: Petyr Ivanov Бихте ли ми помогнали? Благодаря предварително! Титла: Re: Помощ за bash script Публикувано от: shadowx в 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 Титла: Re: Помощ за bash script Публикувано от: LinuxFanUNIX в May 11, 2009, 00:04 #!/bin/bashПросто не мога да разбера, как толкова бързо ми отговори... Супер си. Благодаря ти много! Жив и здрав да си! Браво! Титла: Re: Помощ за bash script Публикувано от: radoulov в May 12, 2009, 11:06 С awk:
Код: awk -F': |\n' '{print>$2".txt"}' RS= big_file За да избегнеш грешката too many open files при някои стари awk версии: Код: awk -F': |\n' '{ Титла: Re: Помощ за bash script Публикувано от: LinuxFanUNIX в May 15, 2009, 23:05 С awk:Мерси. И това ще се пробва. Да си жив и здрав! ;) |