파이프로 구분된 파일과 정렬되지 않은 구분 필드

파이프로 구분된 파일과 정렬되지 않은 구분 필드

|로 구분된 항목이 있는 파일이 있습니다. 그리고 탭.

#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

|그러면 두 탭 중 하나의 데이터가 분할되어 1. 로 시작하는 열에 번호가 매겨지고 1. !/^#/로 시작하지 않는 모든 행과 일치됩니다 #(의도는 헤더 행을 건너뛰는 것이므로 이를 사용할 수 있습니다 NR>1). 이 $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하면 헤더 행을 완전히 건너뛰고 해당 행의 마지막 데이터 앞에 공백이나 탭을 허용할 수 있습니다. 마지막 필드와 원래 여섯 번째 필드 사이의 구분 기호로 공백이나 탭을 재사용합니다.

프로세스 대체를 지원하는 셸에서 <(...)다음 명령을 사용하여 원시 데이터를 탭으로 구분된 세트로 다시 포맷할 수 있습니다. 여기서 문제의 열은 파이프 구분 기호를 유지합니다. column -t데모 목적으로 마지막에 실행했지만 탭으로 구분된 출력을 원하면 제거해야 합니다.

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

관련 정보