2015-09-18 22 views
0

如何過濾出包含列中除0之外的任何值的行?根據文件夾中多個文件的條件過濾掉行

freq_mir_seq        mir_seq         seq      name   freq mir   start end mism  add  t5  t3  s5  s3  DB  ambiguity 
0_hsa-miR-143-3p_TGAGAAGAAGCACTGTAGCTCTT hsa-miR-143-3p_TGAGAAGAAGCACTGTAGCTCTT TGAGAAGAAGCACTGTAGCTCTT seq_100006_x0 0 hsa-miR-143-3p 61 81 6AT u-TT 0 0 AGTCTGAG GCTCAGGA miRNA 1 
5_hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTA hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTA GACCCTGTAGATCCGAATTTGTA seq_100012_x5 5 hsa-miR-10a-5p 22 43 1GT u-A 0 u-G TATATACC TGTGTAAG miRNA 1 
126_hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTG hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTG GACCCTGTAGATCCGAATTTGTG seq_100013_x126 126 hsa-miR-10a-5p 22 44 1GT 0 0 0 TATATACC TGTGTAAG miRNA 1 
23_hsa-miR-1296-5p_TTAGGGCCCTGGCTCCATCT hsa-miR-1296-5p_TTAGGGCCCTGGCTCCATCT TTAGGGCCCTGGCTCCATCT seq_100019_x23 23 hsa-miR-1296-5p 16 35 0 0 0 u-CC TGGGTTAG CTCCTTTA miRNA 1 
3_hsa-miR-887-3p_GTGAACGGGCGCCATCCCGAGGCTT hsa-miR-887-3p_GTGAACGGGCGCCATCCCGAGGCTT GTGAACGGGCGCCATCCCGAGGCTT seq_100029_x3 3 hsa-miR-887-3p 48 72 0 0 0 d-CTT TGGAGTGA GAGGCTTT miRNA 1 
17_hsa-miR-10a-5p_ACCCGGTAGATCCGAATTTGTG hsa-miR-10a-5p_ACCCGGTAGATCCGAATTTGTG ACCCGGTAGATCCGAATTTGTG seq_10002_x17 17 hsa-miR-10a-5p 23 44 5GT 0 d-T 0 TATATACC TGTGTAAG miRNA 1 

我想:

df[df$mism != 0,] 

我有100個文件看起來相同的文件夾,我怎麼在同一時間運行的所有文件此命令?在R中可能嗎?文件名是Miraligner_*.txt.mirna,其中*文件不同。

+1

你的代碼似乎是正確的。你能解釋它爲什麼不起作用嗎? – akrun

+0

我的猜測是'mism'是一個字符向量。你嘗試過'df [df $ mism!=「0」,]'? – Whitebeard

+1

@SamThomas它應該工作。 'v1 < - c('ab',0,24,'b1'); v1 [v1!= 0]#[1]「ab」「24」「b1」' – akrun

回答

4

這應該是所有你需要:

$ awk 'NR==1{for (i=1;i<=NF;i++) f[$i]=i} $(f["mism"])' Miraligner_*.txt.mirna 
freq_mir_seq        mir_seq         seq      name   freq mir   start end mism  add  t5  t3  s5  s3  DB  ambiguity 
0_hsa-miR-143-3p_TGAGAAGAAGCACTGTAGCTCTT hsa-miR-143-3p_TGAGAAGAAGCACTGTAGCTCTT TGAGAAGAAGCACTGTAGCTCTT seq_100006_x0 0 hsa-miR-143-3p 61 81 6AT u-TT 0 0 AGTCTGAG GCTCAGGA miRNA 1 
5_hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTA hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTA GACCCTGTAGATCCGAATTTGTA seq_100012_x5 5 hsa-miR-10a-5p 22 43 1GT u-A 0 u-G TATATACC TGTGTAAG miRNA 1 
126_hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTG hsa-miR-10a-5p_GACCCTGTAGATCCGAATTTGTG GACCCTGTAGATCCGAATTTGTG seq_100013_x126 126 hsa-miR-10a-5p 22 44 1GT 0 0 0 TATATACC TGTGTAAG miRNA 1 
17_hsa-miR-10a-5p_ACCCGGTAGATCCGAATTTGTG hsa-miR-10a-5p_ACCCGGTAGATCCGAATTTGTG ACCCGGTAGATCCGAATTTGTG seq_10002_x17 17 hsa-miR-10a-5p 23 44 5GT 0 d-T 0 TATATACC TGTGTAAG miRNA 1 

要創建每個輸入文件名爲Miraligner_foo.txt.mirnaMiraligner_foo.txt.mirna.out,單獨的輸出文件,你可以這樣做:

awk 'FNR==1{out=FILENAME".out"; for (i=1;i<=NF;i++) f[$i]=i} $(f["mism"]){print > out}' Miraligner_*.txt.mirna 

如果你不使用GNU awk,那麼你可能會從上面得到一個「太多打開文件」的錯誤,那麼你只需要在打開下一個文件之前關閉最後一個文件:

awk 'FNR==1{close(out); out=FILENAME".out"; for (i=1;i<=NF;i++) f[$i]=i} $(f["mism"]){print > out}' Miraligner_*.txt.mirna 
+0

這是否刪除沒有0的行?什麼是輸出? – user2300940

+0

它在多個文件上運行@Ed Morton – user2300940

+0

對不起,但我希望每個輸入都有一個輸出。 – user2300940

相關問題