|로 구분된 항목이 있는 파일이 있습니다. 그리고 탭.
#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
따라서 간단하게 유지하기 위해 cut
6번째 필드를 사용한 다음 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