小编ros*_*ser的帖子

使用BASH中的shell脚本将大型txt文件拆分为正则表达式中的200个较小的txt文件

嗨,大家好,我希望这个主题足够清楚,我在前面提到过的bin中没有找到任何具体的内容.我试过在Perl或Python中实现它,但我想我可能会努力.

是否有一个简单的shell命令/管道将基于开始和结束正则表达式将我的4mb .txt文件拆分成单独的.txt文件?

我提供了以下文件的简短示例..因此您可以看到每个"故事"都以短语"X XXX of XXX DOCUMENTS"开头,可以用来分割文件.

我认为这应该很容易,如果bash不能这样做我会感到惊讶 - 比Perl/Py更快.

这里是:

                           1 of 999 DOCUMENTS


              Copyright 2011 Virginian-Pilot Companies LLC
                          All Rights Reserved
                   The Virginian-Pilot(Norfolk, VA.)

...



                           3 of 999 DOCUMENTS


                  Copyright 2011 Canwest News Service
                          All Rights Reserved
                          Canwest News Service

...
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

罗斯

regex unix bash shell scripting

11
推荐指数
2
解决办法
8406
查看次数

基于行成员资格的逻辑向量

感谢您的耐心等待.

我正在处理详细介绍患者和药物的大型数据集.

药物很难编码,因为它们(通常)没有意义,除非与剂量匹配.

我有一个带载体的数据框(Drug1,Drug2 ..... Drug 16),其中个体患者用行表示.载体实际上是因子,具有100个可能的水平(患者可以使用的所有药物).

我想做的就是产生一个逻辑向量(TTTTFFFFTTT ......),然后我可以将其转换成一个数据帧,告诉我患者是否患有特定的药物.

然后,我可以使用特别重要的药物存在或不存在作为模型中的分类协变量.

我试过grep,沿着行搜索,我可以生成一个标识符向量,但我似乎无法生成逻辑向量.

我意识到我做错了什么.

names(drugindex)
 [1] "book.MRN" "DRUG1"    "DRUG2"    "DRUG3"    "DRUG4"    "DRUG5"  
 [7] "DRUG6"    "DRUG7"    "DRUG8"    "DRUG9"    "DRUG10"   "DRUG11"  
[13] "DRUG12"   "DRUG13"   "DRUG14"   "DRUG15"   "DRUG16"  

> truvec<-drugindex$book.MRN[as.vector(unlist(apply(drugindex[,2:17], 2, grep, pattern="Lamotrigine")))]
> truvec
truvec
[1] 0024633  0008291  0008469  0030599  0027667
37 Levels: 0008291  0008469  0010188  0014217  0014439  0015822  ... 0034262

> head(drugindex)
   book.MRN       DRUG1        DRUG2          DRUG3        DRUG4        DRUG5
4  0008291  Venlafaxine Procyclidine  Flunitrazepam Amisulpiride    Clozapine
31 0008469  Venlafaxine  Mirtazapine        Lithium   Olanzapine   Metoprolol
3 …
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
1
解决办法
296
查看次数

根据两个变量匹配数据帧行(索引)

我本质上是试图将无序数据变成长形式的线性建模.

我有2个data.frames"rec"和"book"

"book"中的每一行都需要根据行中的两个变量粘贴到几行"rec"的末尾:"MRN"和"COURSE"匹配.

我尝试了以下和其中的变化无济于事:

i=1
newlist=list()
colnames(newlist)=colnames(book)
for ( i in 1:dim(rec)[1]) {
    mrn=as.numeric(as.vector(rec$MRN[i]));
    course=as.character(rec$COURSE[i]);
get.vector<-as.vector(((as.numeric(as.vector(book$MRN))==mrn) & (as.character(book$COURSE)==course)))
newlist[i]<-book[get.vector,] 
i=i+1;
}
Run Code Online (Sandbox Code Playgroud)

如果有人有任何建议

1)让它工作2)使它更优雅(或者可能只是不那么笨拙)

如果我不清楚,请求你的赦免.

我知道我没有合并上面的任何数据,我想如果我能生成一个长格式的data.frame我可以自己组合它们

merge join r dataframe

2
推荐指数
1
解决办法
9580
查看次数

慢python文件我:O; Ruby运行得比这更好; 得错了语言?

请指教 - 我将把它作为学习点.我是初学者.

我正在将一个25mb的文件拆分成几个较小的文件.

一位善良的大师在这里给了我一个Ruby sript.它的工作速度非常快.所以,为了学习我用python脚本模仿它.这就像一只三条腿的猫(慢).我想知道是否有人可以告诉我为什么?

我的python脚本

    ##split a file into smaller files
###########################################
def splitlines (file) :
        fileNo=0001
        outFile=open("C:\\Users\\dunner7\\Desktop\\Textomics\\Media\\LexisNexus\\ele\\newdocs\%s.txt" % fileNo, 'a') ## open file to append 
        fh = open(file, "r") ## open the file for reading
        mylines = fh.readlines() ### read in lines
        for line in mylines: ## for each line
                        if re.search("Copyright ", line): # if the line is equal to the regex
                            outFile.close()  ##  close the file
                            fileNo +=1  #and add one to the filename, starting …
Run Code Online (Sandbox Code Playgroud)

ruby python regex text

0
推荐指数
1
解决办法
821
查看次数

标签 统计

r ×2

regex ×2

bash ×1

dataframe ×1

join ×1

merge ×1

python ×1

ruby ×1

scripting ×1

shell ×1

text ×1

unix ×1