我有一个文件,该文件的条目由“\”和“选项卡”分隔。
#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. 我用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 如果有一个优雅的方法来做这件事,请指导我。
发布于 2021-12-22 07:42:41
使用米勒,grep和粘贴
paste <(<input.txt tail -n +2 | grep -oP '[0-9]+\.[0-9]+你将会有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 | | |
+-------------------+-------------------+----------------------+----------------------+----------------+------------+------+------------+--------------------------------------------+---------------------------------------+--------------------------------------------------+) \
<(<input.txt tail -n +2 | mlr --nidx --ifs "|" unsparsify then clean-whitespace then cut -f 6)你将会有
A2
你的输入很奇怪。您应该在请求中指定最后一个字段是每一行的最后一个数值,而不是一个特定的字段。
A3
发布于 2021-12-21 16:34:46
我们可以使用cut轻松地选择第6个管道分隔字段,但是第8个字段(FPKM)似乎包含多个由管道分隔的数据,导致整个表出现了对齐。
因此,为了简单起见,我们使用cut作为第6个字段on,然后使用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个字段之间的分隔符。
在使用<(...)支持进程替换的shell中,您可以使用以下方法将原始数据重新格式化为以选项卡分隔的集合,而有问题的列保留其管道分隔符。为了演示目的,我在最后通过column -t运行它,但是如果需要选项卡分隔的输出,则应该删除它。
paste <( cut -d '|' -f -7 file | tr '|' '\t' ) \
<( cut -d '|' -f 8- file | sed 's/|[[:blank:]]//' ) |
tail -n +2 | column -thttps://unix.stackexchange.com/questions/683348
复制相似问题