亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 6343 | 回復(fù): 20
打印 上一主題 下一主題

又遇難題,懇請幫助 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-09-20 11:41 |只看該作者 |倒序瀏覽
本帖最后由 bioinfor 于 2010-09-23 11:05 編輯

文件中數(shù)據(jù)分兩列,兩列間以table鍵格開,兩列的數(shù)據(jù)行數(shù)可能不相同,其中第一列存在存放一個或兩個數(shù)據(jù)的單元格,一個數(shù)據(jù)的為單個名稱如LDHA,兩個數(shù)據(jù)的用/符號分開,其中/表示或的意思,如MFSD3 / LOC113655表示MFSD3或LOC113655,但MFSD3 / LOC113655仍占第一列的一個單元格,第二列不存在/分開的名稱,因此第二列單元格均只有一個數(shù)據(jù)。如下:

LDHA  ZNFX1
GABPB2  MFSD3
HDHD2  PNPO
STYXL1 / DUSP24  PLEKHA3
PNPO  PDCD1LG2
SECISBP2  CYBRD1
SLC12A9  DUSP24
MCOLN1  MYT1L
MFSD3 / LOC113655  FYCO1

將相同名稱的輸出來,中間以table鍵相隔開,如上面應(yīng)該輸出:
PNPO  PNPO
STYXL1 / DUSP24 DUSP24
MFSD3 / LOC113655 MFSD3


實際文件可能比較大,大約有4000行左右。

附上實際數(shù)據(jù)。


謝謝!

Book3.rar

10.26 KB, 下載次數(shù): 83

論壇徽章:
0
2 [報告]
發(fā)表于 2010-09-20 11:53 |只看該作者
2個方法
第一個直接復(fù)制到excl表格中,然后選擇排序,5秒內(nèi)搞定
第二個辦法,用perl正則取第一列作為hash的key,整列做值,最后按key  foreach輸出,耗時2分鐘

論壇徽章:
0
3 [報告]
發(fā)表于 2010-09-20 14:44 |只看該作者
可以考慮用列表就夠了,不過數(shù)據(jù)的確很龐大,做個循環(huán)讀好了,也不要用列表了

論壇徽章:
0
4 [報告]
發(fā)表于 2010-09-20 15:14 |只看該作者
用hash應(yīng)該還是挺快的。

論壇徽章:
0
5 [報告]
發(fā)表于 2010-09-20 21:02 |只看該作者
如圖,你的數(shù)據(jù)從第991行開始就只有1列了
請準(zhǔn)確的描述一下需求

論壇徽章:
0
6 [報告]
發(fā)表于 2010-09-21 21:14 |只看該作者
本帖最后由 shangat 于 2010-09-24 10:32 編輯

回復(fù) 1# bioinfor
  1. use strict;
  2. use warnings;

  3. my ( @arr, $key, $values, $temp );
  4. my %hash;

  5. open A,"Book.txt" or die;
  6. while ( <A> ) {
  7.         chomp;
  8.         @arr = split;
  9.         if ( @arr % 2 ) {
  10.                 $hash{$_} =  "###";
  11.         }
  12.         else {
  13.                 $values = $arr[-1];
  14.                 s/(\w.*)\s+$values/$1/;
  15.                 $hash{$_} = $values;
  16.         }
  17. }

  18. foreach $key ( keys %hash ) {
  19.         @arr = split /\s+/,$key;
  20.         if ( @arr == 3 ) {
  21.                 foreach $temp ( @arr[0,2] ) {
  22.                         if ( ( $values ) = grep $temp eq $_, values %hash ) {
  23.                                 printf ("%-25s\t%-15s\n",$key, $values);
  24.                         }
  25.                 }
  26.         }
  27.         else {
  28.                 if ( ( $values ) = grep $arr[0] eq $_, values %hash ) {
  29.                         printf ("%-25s\t%-15s\n", $key, $values);
  30.                 }
  31.         }
  32. }
復(fù)制代碼
Q1:
5樓 發(fā)表于 2010-09-20 21:02  | 只看該作者

如圖,你的數(shù)據(jù)從第991行開始就只有1列了

Q2:還要先對 Book3.txt 處理一下,含有 ^M
  1. sed -n 's/\r//p' Book.txt >book.txt
復(fù)制代碼
或者
  1. dos2unix Book.txt
復(fù)制代碼

論壇徽章:
0
7 [報告]
發(fā)表于 2010-09-22 11:12 |只看該作者
\w.*  
這是要匹配啥?

論壇徽章:
0
8 [報告]
發(fā)表于 2010-09-23 10:48 |只看該作者
本帖最后由 bioinfor 于 2010-09-23 10:56 編輯
2個方法
第一個直接復(fù)制到excl表格中,然后選擇排序,5秒內(nèi)搞定
第二個辦法,用perl正則取第一列作為hash ...
xti9er 發(fā)表于 2010-09-20 11:53


EXCEL不行,因為第一列的數(shù)據(jù)和第二列的數(shù)據(jù)行數(shù)不一樣,往往第一列的要多一些,所以用眼來比對不太現(xiàn)實。




謝謝shangat 的代碼,但為什么我運行如下例子時
LDHA  ZNFX1
GABPB2  MFSD3
HDHD2  PNPO
STYXL1 / DUSP24  PLEKHA3
PNPO  PDCD1LG2
SECISBP2  CYBRD1
SLC12A9  DUSP24
MCOLN1  MYT1L
MFSD3 / LOC113655  FYCO1


沒有得到應(yīng)有的結(jié)果:

PNPO  PNPO
STYXL1 / DUSP24 DUSP24
MFSD3 / LOC113655 MFSD3


另外,我使用我上傳的Book3.rar文件中的數(shù)據(jù)運行了一下,結(jié)果不太對,第一列中存在而第二列沒有的也輸出來了
如:
STX18                                   STX18                
QRSL1                                   QRSL1


STX18在第一列存在,第二列沒有這個數(shù)據(jù)。

另外:Q2:還要先對 Book3.txt 處理一下,含有 ^M
^M是什么?

論壇徽章:
0
9 [報告]
發(fā)表于 2010-09-24 10:46 |只看該作者
回復(fù) 8# bioinfor

A1:原來的代碼為我對991 行之后添加內(nèi)容進行操作,沒有考慮到存在單列數(shù)據(jù),并且 while 循環(huán)中的匹配也不對,不好意思
  1. CSTF2T        GALNT4
  2. CTDSPL2 / HSPC129        RANBP6
  3. CTSA / PPGB        EYA1
  4. CTSL1 / CTSL           991
  5. CYB5B / CYB5-M           992
  6. CYB5R4 / NCB5OR           993
  7. CYP1B1           994
  8. CYP51A1           995
復(fù)制代碼
另外,我使用我上傳的Book3.rar文件中的數(shù)據(jù)運行了一下,結(jié)果不太對,第一列中存在而第二列沒有的也輸出來了

在于匹配時哈希的鍵和值一樣了,當(dāng)然會匹配上,自己太不細心了
A2:
另外:Q2:還要先對 Book3.txt 處理一下,含有 ^M

自己找答案

代碼已修改

論壇徽章:
16
IT運維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2015-10-14 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-10-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-11-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT運維版塊每日發(fā)帖之星
日期:2016-04-15 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-21 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-08-16 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運維版塊每日發(fā)帖之星
日期:2015-08-14 06:20:00
10 [報告]
發(fā)表于 2010-10-03 13:12 |只看該作者
回復(fù) 1# bioinfor

一點都不難,但是比較煩,囧。
調(diào)試了很久,╮(╯▽╰)╭,按照你的數(shù)據(jù)規(guī)則,以下這個腳本應(yīng)該沒問題。有問題站短我


  1. #!/bin/awk -f
  2. # author :expert1
  3. #date :2010-10-03

  4. #name :test.awk

  5. #USAGE: awk -f test.awk book3 book3

  6. NR==FNR{if(NF==2)a[$1];else a[$1$2$3]

  7.                  }

  8. NR>FNR{

  9.             for(i in a) {

  10.             if (split(i,b,"/")>1)

  11.                    {if(($NF==b[1])||($NF==b[2]))print b[1]" / "b[2]"\t"$NF}

  12.            else  {if(($NF==i))print i"\t"$NF}
  13.                      
  14.                         }

  15.       }
復(fù)制代碼

用法:awk -f test.awk book3 book3
我用的是gawk ,估計一般的awk都可以吧,這里沒有什么特殊的函數(shù)。只有一個split。
我處理的時候,book3的規(guī)則是:第一列內(nèi)若是沒單元格的,第一列第二列直接tab隔開,
第一列內(nèi)有單元格的,第一列內(nèi)abcd / efgh (空格,/,空格)然后tab隔開然后再第二列。
按照這個規(guī)則的文件,這個腳本沒問題。取前990行結(jié)果如下:
BRMS1L  BRMS1L
RPS6KA5 RPS6KA5
AP2B1   AP2B1
ARID4A  ARID4A
BTG3    BTG3
RBL1    RBL1
ARL1    ARL1
NAGK    NAGK
HBP1    HBP1
CDC37L1 CDC37L1
ERBB3   ERBB3
MAP3K5  MAP3K5
DCBLD2  DCBLD2
ANKRD13C / DKFZP566D1346        ANKRD13C
BTBD7   BTBD7
CTSA / PPGB     CTSA
C9orf5  C9orf5
CDKN1A  CDKN1A
PAFAH2  PAFAH2
SLC2A4  SLC2A4
APPL1 / APPL    APPL1
SLC30A7 SLC30A7
NRSN1 / VMP     NRSN1
PAPOLA  PAPOLA
PRR16 / LOC51334        PRR16
TUSC2   TUSC2
MTF1    MTF1
EIF2S1  EIF2S1
PLAGL2  PLAGL2
CENPO / MGC11266        CENPO
LAPTM4A LAPTM4A
PPP2CA  PPP2CA
EIF4H / WBSCR1  EIF4H
CEP57 / PIG8    CEP57
APP     APP
MAP3K14 MAP3K14
FZD7    FZD7
ABHD2   ABHD2
MBTPS1  MBTPS1
CTDSPL2 / HSPC129       CTDSPL2
UGDH    UGDH
至于3000行都是小case了,我處理過7000多行的文件也是shell ,很快的。
PS:你的附件的991行后數(shù)據(jù)都有問題。
你給的幾個數(shù)據(jù)我都試過了沒問題。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP