Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=9507262&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Tue Apr 12 14:49:29 2016
Кодировка: Windows-1251

Поисковые слова: tail
[nix] Быстро обработать текстовый файл. Подскажите, по SED скрипту - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 0 | 20 | показать все | след. страница
Hat_if_nat
молчу,смотрю в даль

Рег.: 23.01.2005
Сообщений: 448
Из: сказка Туве Янссон
Рейтинг: 160
  [nix] Быстро обработать текстовый файл. Подскажите, по SED скрипту
      17.05.2010 11:38
 

Написал код на баше который перед каждой строкой куска геномного кода ставит порядковый номер, например :

>SEQUENCE_1_length_35
G.CCCTGATCAGCCGGATGGGCAACCAGAAGGTCCG
>SEQUENCE_2_length_35
G.TCCACACCGGCATCCCCGAGCCGCGACATGCCGG

code:
#!/usr/bin/bash len=$(wc -l s7.fa | awk '{print($1)}' ) (( len++ )) for ((i=1; i<$len; i+=1)) do echo '>SEQUENCE_'${i}'_length_35' >> s7_fasted.fa head -n $i forSOAP_s7_final.fa | tail -n 1 >> s7_fasted.fa done


Проблема, в том что количество строк для обработки огромное (~десятки миллионов)
, и за трое суток скрипт не успел обработать и 20 % инфы. Вопрос знатокам: может быть есть более быстрый способ ? Например sed...





Редактировал DarkGray (19.05.2010 13:30)
Basilio
GreenOne

Рег.: 14.10.2002
Сообщений: 13749
Из: Москва
Рейтинг: 3476
  Re: SED скрипт [re: Hat_if_nat]
      17.05.2010 11:42
 

я конечно понимаю, что сед полон по Тьюрингу, но может быть
программа на более высокоуровневом языке справится быстрее?

horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3783
Рейтинг: 2135
  Re: SED скрипт [re: Hat_if_nat]
      17.05.2010 11:44
5

Quote:

for ((i=1; i<$len; i+=1))
do
     echo '>SEQUENCE_'${i}'_length_35' >> s7_fasted.fa
     head -n $i forSOAP_s7_final.fa | tail -n 1 >> s7_fasted.fa

done



вижу квадрат
данную задачу надо решать линейным пробегом

horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3783
Рейтинг: 2135
  Re: SED скрипт [re: Hat_if_nat]
      17.05.2010 11:51
4

обычно на линуксах tcl есть (в баше я не спец :( )
code:
#!/usr/bin/tclsh proc Numerate {fileName} { set h [open $fileName r] set lineNumber 0 while {[gets $h line] >= 0} { incr lineNumber puts ">SEQUENCE_${lineNumber}_length_35" puts $line } close $h } if {$argc >= 1} { Numerate [lindex $argv 0] } else { puts "Usage: tclsh script.tcl filename" }


если сделать скрипту chmod +x, то по идее запустится просто: ./script.tcl myfile.txt

в вашем случае запуск такой:
./script.tcl forSOAP_s7_final.fa > s7_fasted.fa

Lynn
'Кофеман'

Рег.: 28.02.2003
Сообщений: 7315
Из: Тропарево-Никулино
Рейтинг: 905
  Re: SED скрипт [re: Hat_if_nat]
      17.05.2010 11:53
9

code:
perl -pe 'print ">SEQUENCE_", ++$i, "_length_35\n"' < s7.fa




Плыл в небе, глубоком как сон,
Кокаиновый пес
- Адриан и Александр
Vovkaii
Carpal Tunnel

Рег.: 08.11.2003
Сообщений: 3919
Из: Espoo
Рейтинг: 3268
  Re: SED скрипт [re: Hat_if_nat]
      17.05.2010 11:55
3

code:
% i=1; cat forSOAP_s7_final.fa | while read line; do echo '>SEQUENCE_'${i}'_length_35'; echo $line; i=$((i+1)); done > s7_fasted.fa




Сделай это сам
Hat_if_nat
молчу,смотрю в даль

Рег.: 23.01.2005
Сообщений: 448
Из: сказка Туве Янссон
Рейтинг: 160
  Re: SED скрипт [re: Vovkaii]
      17.05.2010 12:18
 

Всем большое спасибо!



Jerry
Санек

Рег.: 14.03.2004
Сообщений: 1360
Из: Москва
Рейтинг: 501
  Re: SED скрипт [re: Hat_if_nat]
      17.05.2010 12:32
3

Ну и на sed'е, раз уж просили :grin:
code:
sed -e "=" | sed -e "s/^/>SEQUENCE_/;s/$/_length_35/;N"


Jerry
Санек

Рег.: 14.03.2004
Сообщений: 1360
Из: Москва
Рейтинг: 501
  Re: SED скрипт [re: Hat_if_nat]
      17.05.2010 12:58
9

Решил еще сравнить по скорости предложенные решения
Тестировались на одном файле в 1млн строк. Результаты сравнивались, у всех получалось одно и то же :)
scriptrealusersys
horror_script.tcl12.486s6.252s4.213s
Lynn_perl5.047s2.043s0.194s
Vovkaii_bash1m57.362s1m28.694s16.965s
Jerry_sed6.012s4.159s0.294s
Vital303_awk4.887s1.793s0.194s
horror_haskell_wine1m25.286s34.061s14.562s

Самые быстрые пока perl и awk. В решении Vovkaii похоже где-то вылазит квадратичное время работы, или просто константа большая при n :confused:



Редактировал Jerry (17.05.2010 18:04)
Vital303
tired

Рег.: 18.10.2004
Сообщений: 480
Рейтинг: 44
  Re: SED скрипт [re: Jerry]
      17.05.2010 13:04
3

awk
code:
awk '{print "SEQUENCE_" NR "_length_35"} 1'


horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3783
Рейтинг: 2135
  Re: SED скрипт [re: Jerry]
      17.05.2010 14:27
3

а давай еще в эту статистику вот это чудо вставим?:)
code:
import System (getArgs) parseFile :: String -> IO() parseFile filename = do content <- readFile filename mapM_ putStrLn $ map (\(x, y) -> concat [">SEQUENCE_", show x, "_length_35\n", y]) $ zip [1..] (lines content) main = do args <- getArgs case args of [] -> error "Usage: program filename" (filename:xs) -> parseFile filename


Jerry
Санек

Рег.: 14.03.2004
Сообщений: 1360
Из: Москва
Рейтинг: 501
  Re: SED скрипт [re: horror]
      17.05.2010 15:19
 

Не, не получится, я либо не знаю, что это за язык, либо у меня к нему интерпретатора нет на компе. А скорее всего ни то, ни другое :grin:

Sevurrrra
Хранитель маяка

Рег.: 10.09.2007
Сообщений: 2050
Рейтинг: 2759
  Re: SED скрипт [re: Jerry]
      17.05.2010 16:05
-8

пейтон это

reincarnation
knight

Рег.: 12.09.2006
Сообщений: 719
Рейтинг: 666
  Re: SED скрипт [re: Sevurrrra]
      17.05.2010 16:06
2

Quote:

пейтон это



Это не пейтон, это Haskell.

horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3783
Рейтинг: 2135
  Re: SED скрипт [re: Jerry]
      17.05.2010 16:17
1

Quote:

Не, не получится



если ты на винде, то я тебе могу скомпилированный ехешник дать, должен запуститься без доп. либ
зы: возможно, это уже нечестно сравнивать со скомпилированным скриптом =\

reincarnation
knight

Рег.: 12.09.2006
Сообщений: 719
Рейтинг: 666
  Re: SED скрипт [re: horror]
      17.05.2010 17:24
3

Quote:

зы: возможно, это уже нечестно сравнивать со скомпилированным скриптом =\



Это да, чтобы по-честному, надо через runghc запускать.

horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3783
Рейтинг: 2135
  Re: SED скрипт [re: reincarnation]
      17.05.2010 17:27
 

Quote:

Это да, чтобы по-честному, надо через runghc запускать.



вот спасибо, а я не знал=\
ковырял командную строчку у ghc, ghci и ничего не нашел =\

Jerry
Санек

Рег.: 14.03.2004
Сообщений: 1360
Из: Москва
Рейтинг: 501
  Re: SED скрипт [re: horror]
      17.05.2010 18:06
 

Quote:

зы: возможно, это уже нечестно сравнивать со скомпилированным скриптом =\



С моей стороны тоже будет нечестно запускать его через wine :p
Добавил строчку в табличку

horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3783
Рейтинг: 2135
  Re: SED скрипт [re: Jerry]
      17.05.2010 18:56
 

что-то барахлит твой скрипт
можешь подфиксить?



Редактировал horror (17.05.2010 23:06)
horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3783
Рейтинг: 2135
  Re: SED скрипт [re: Jerry]
      17.05.2010 19:16
 

Аналогичная статистика (cygwin на помощь пришел)
script real user sys
Lynn_perl 0m2.884s 0m2.609s 0m0.202s
Vital303_awk 0m3.385s 0m3.328s 0m0.031s
Vovkaii_bash 2m34.265s 1m24.561s 1m18.983s
horror_script.tcl 0m29.753s 0m0.000s 0m0.046s
horror_hs 0m5.834s 0m0.000s 0m0.016s
horror_hs_exe 0m3.567s 0m0.000s 0m0.000s
horror_bat 34.23m
horror_vbs 0m43.249s 0m0.015s 0m0.000s
horror_lua 0:02.89
hat_if_nat (37%) 631m24.843s 122m34.159s 248m2.638s
Sevurrrra_ocaml 0:12.07




Редактировал horror (18.05.2010 10:15)
Страницы: 0 | 20 | показать все | след. страница

Technical >> Development (Archive)

Дополнительная информация
0 зарегистрированных и 1 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы
>>
Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в