パイプで区切られたファイルと整列されていない区切りフィールド

パイプで区切られたファイルと整列されていない区切りフィールド

|で区切られた項目を持つファイルがあります。そしてタブ。

#Name   Length  Bases   Coverage    Reads   RPKM    Frags   FPKM
ENST00000423372.3|ENSG00000237683.5|-|-|AL627309.1-201|AL627309.1|2661|UTR5:1-70|CDS:71-850|UTR3:851-2661|  2661    1989878 747.7933    13178   33.6603 6589    33.6603
ENST00000426406.1|ENSG00000235249.1|OTTHUMG00000002860.1|OTTHUMT00000007999.1|OR4F29-001|OR4F29|995|UTR5:1-19|CDS:20-958|UTR3:959-995|  995 302 0.3035  2   0.0137  1   0.0137
ENST00000599533.1|ENSG00000269831.1|-|-|AL669831.1-201|AL669831.1|129|CDS:1-129|    129 52548   407.3488    348 18.3359 174 18.3359
ENST00000437963.1|ENSG00000187634.6|OTTHUMG00000040719.8|OTTHUMT00000097862.3|SAMD11-003|SAMD11|387|UTR5:1-60|CDS:61-387|   387 302 0.7804  2   0.0351  1   0.0351
ENST00000342066.3|ENSG00000187634.6|OTTHUMG00000040719.8|OTTHUMT00000276866.2|SAMD11-010|SAMD11|2551|UTR5:1-83|CDS:84-2129|UTR3:2130-2551|  2551    17818   6.9847  118 0.3144  59  0.3144
ENST00000341065.4|ENSG00000187634.6|OTTHUMG00000040719.8|OTTHUMT00000097860.4|SAMD11-001|SAMD11|2191|CDS:1-1769|UTR3:1770-2191| 2191    12080   5.5135  80  0.2482  40  0.2482
ENST00000455979.1|ENSG00000187634.6|OTTHUMG00000040719.8|OTTHUMT00000097863.4|SAMD11-004|SAMD11|1731|CDS:1-1625|UTR3:1626-1731| 1731    302 0.1745  2   0.0079  1   0.0079
ENST00000598827.1|ENSG00000268179.1|-|-|AL645608.1-201|AL645608.1|336|CDS:1-336|    336 302 0.8988  2   0.0405  1   0.0405

私が望む出力は

AL627309.1  33.6603
OR4F29      0.0137
AL669831.1  18.3359
SAMD11  0.0351
SAMD11  0.3144
SAMD11  0.2482
SAMD11  0.0079
     
separated by tab. 

tabsを使用して|をすべて置き換えましたが、tr '|' "\t" < input.file フィールドは可変であるため、結果ファイルにこの内容が表示されます。

#Name                                       Length  Bases   Coverage    Reads   RPKM    Frags   FPKM    
ENST00000423372.3   ENSG00000237683.5   -   -   AL627309.1-201  AL627309.1  2661    UTR5:1-70   CDS:71-850  UTR3:851-2661       2661    1989878 747.7933    13178   33.6603 6589    33.6603
ENST00000426406.1   ENSG00000235249.1   OTTHUMG00000002860.1    OTTHUMT00000007999.1    OR4F29-001  OR4F29  995 UTR5:1-19   CDS:20-958  UTR3:959-995        995 302 0.3035  2   0.0137  1   0.0137
ENST00000599533.1   ENSG00000269831.1   -   -   AL669831.1-201  AL669831.1  129 CDS:1-129       129 52548   407.3488    348 18.3359 174 18.3359     
ENST00000437963.1   ENSG00000187634.6   OTTHUMG00000040719.8    OTTHUMT00000097862.3    SAMD11-003  SAMD11  387 UTR5:1-60   CDS:61-387      387 302 0.7804  2   0.0351  1   0.0351  
ENST00000342066.3   ENSG00000187634.6   OTTHUMG00000040719.8    OTTHUMT00000276866.2    SAMD11-010  SAMD11  2551    UTR5:1-83   CDS:84-2129 UTR3:2130-2551      2551    17818   6.9847  118 0.3144  59  0.3144
ENST00000341065.4   ENSG00000187634.6   OTTHUMG00000040719.8    OTTHUMT00000097860.4    SAMD11-001  SAMD11  2191    CDS:1-1769  UTR3:1770-2191      2191    12080   5.5135  80  0.2482  40  0.2482  
ENST00000455979.1   ENSG00000187634.6   OTTHUMG00000040719.8    OTTHUMT00000097863.4    SAMD11-004  SAMD11  1731    CDS:1-1625  UTR3:1626-1731      1731    302 0.1745  2   0.0079  1   0.0079  

これを行う優雅な方法がある場合は、ご案内ください。

答え1

タブとスペースが正しいと仮定すると、これは機能します。column -tこれを別のツールにリンクする場合は、フィールド間にタブのみを含めて削除します。

awk -F'[|\t]' '!/^#/{printf "%s\t%s\n", $6, $NF}' your_datafile | column -t

|これにより、2つのタブのうちの1つのデータが分割され、1.で始まる列に番号が付けられ、1.で始まらないすべての!/^#/行と一致します#(意図はヘッダー行をスキップするためですNR>1。)この$6構成は、6番目のフィールドを選択します。$NFフィールド番号に関係なく、最後のフィールドが選択されます。

サンプルデータファイル出力を使用して、

AL627309.1  33.6603
OR4F29      0.0137
AL669831.1  18.3359
SAMD11      0.0351
SAMD11      0.3144
SAMD11      0.2482
SAMD11      0.0079
AL645608.1  0.0405

答え2

使用ミラー、grep、貼り付け

paste <(<input.txt tail -n +2 | grep -oP '[0-9]+\.[0-9]+$') \
<(<input.txt tail -n +2 | mlr --nidx --ifs "|" unsparsify then clean-whitespace then cut -f 6)

あなたはやる

AL627309.1      33.6603
OR4F29  0.0137
AL669831.1      18.3359
SAMD11  0.0351
SAMD11  0.3144
SAMD11  0.2482
SAMD11  0.0079
AL645608.1      0.0405

あなたの入力は奇妙です。最後のフィールドが特定のフィールドではなく各行の最後の数値になるように要求に割り当てる必要があります。

+-------------------+-------------------+----------------------+----------------------+----------------+------------+------+------------+--------------------------------------------+---------------------------------------+--------------------------------------------------+
| 1                 | 2                 | 3                    | 4                    | 5              | 6          | 7    | 8          | 9                                          | 10                                    | 11                                               |
+-------------------+-------------------+----------------------+----------------------+----------------+------------+------+------------+--------------------------------------------+---------------------------------------+--------------------------------------------------+
| ENST00000423372.3 | ENSG00000237683.5 | -                    | -                    | AL627309.1-201 | AL627309.1 | 2661 | UTR5:1-70  | CDS:71-850                                 | UTR3:851-2661                         | 2661 1989878 747.7933 13178 33.6603 6589 33.6603 |
| ENST00000426406.1 | ENSG00000235249.1 | OTTHUMG00000002860.1 | OTTHUMT00000007999.1 | OR4F29-001     | OR4F29     | 995  | UTR5:1-19  | CDS:20-958                                 | UTR3:959-995                          | 995 302 0.3035 2 0.0137 1 0.0137                 |
| ENST00000599533.1 | ENSG00000269831.1 | -                    | -                    | AL669831.1-201 | AL669831.1 | 129  | CDS:1-129  | 129 52548 407.3488 348 18.3359 174 18.3359 |                                       |                                                  |
| ENST00000437963.1 | ENSG00000187634.6 | OTTHUMG00000040719.8 | OTTHUMT00000097862.3 | SAMD11-003     | SAMD11     | 387  | UTR5:1-60  | CDS:61-387                                 | 387 302 0.7804 2 0.0351 1 0.0351      |                                                  |
| ENST00000342066.3 | ENSG00000187634.6 | OTTHUMG00000040719.8 | OTTHUMT00000276866.2 | SAMD11-010     | SAMD11     | 2551 | UTR5:1-83  | CDS:84-2129                                | UTR3:2130-2551                        | 2551 17818 6.9847 118 0.3144 59 0.3144           |
| ENST00000341065.4 | ENSG00000187634.6 | OTTHUMG00000040719.8 | OTTHUMT00000097860.4 | SAMD11-001     | SAMD11     | 2191 | CDS:1-1769 | UTR3:1770-2191                             | 2191 12080 5.5135 80 0.2482 40 0.2482 |                                                  |
| ENST00000455979.1 | ENSG00000187634.6 | OTTHUMG00000040719.8 | OTTHUMT00000097863.4 | SAMD11-004     | SAMD11     | 1731 | CDS:1-1625 | UTR3:1626-1731                             | 1731 302 0.1745 2 0.0079 1 0.0079     |                                                  |
| ENST00000598827.1 | ENSG00000268179.1 | -                    | -                    | AL645608.1-201 | AL645608.1 | 336  | CDS:1-336  | 336 302 0.8988 2 0.0405 1 0.0405           |                                       |                                                  |
+-------------------+-------------------+----------------------+----------------------+----------------+------------+------+------------+--------------------------------------------+---------------------------------------+--------------------------------------------------+

答え3

以下を使用して、パイプで区切られた6番目のcutフィールドを簡単に見つけることができます。FPKM

したがって、簡単にするためにcut6番目のフィールドを使用し、sed最初の|タブから最後のタブまで各行のすべての項目を削除するために使用します。

$ cut -d '|' -f 6- file | sed -n '1!s/|.*\([[:blank:]]\)/\1/p'
AL627309.1      33.6603
OR4F29  0.0137
AL669831.1      18.3359
SAMD11  0.0351
SAMD11  0.3144
SAMD11  0.2482
SAMD11  0.0079
AL645608.1      0.0405

上記の方法を使用するsedと、ヘッダー行を完全にスキップし、その行の最後のデータの前にスペースまたはタブを許可できます。最後のフィールドと元の6番目のフィールドの間の区切り文字でスペースまたはタブを再利用します。

プロセス置換をサポートするシェルでは、<(...)次のコマンドを使用して生データをタブ区切りセットに再フォーマットできます。ここで、問題の列はパイプ区切り文字を保持します。column -tデモ目的で最後に実行しましたが、タブ区切りの出力が必要な場合は削除する必要があります。

paste <( cut -d '|' -f -7 file | tr '|' '\t' ) \
      <( cut -d '|' -f 8- file | sed 's/|[[:blank:]]//' ) |
tail -n +2 | column -t

関連情報