从具有不同列数的文件中提取数据

2024-05-13 22:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个选项卡分隔的文件,显示如下:

NM_000014   chr12   -   36  9220303 9220778 9221335 9222340 9223083 9224954 9225248 9227155 9229351 9229941 9230296 9231839 9232234 9232689 9241795 9242497 9242951 9243796 9246060 9247568 9248134 9251202 9251976 9253739 9254042 9256834 9258831 9259086 9260119 9261916 9262462 9262909 9264754 9264972 9265955 9268359     9220435 9220820 9221438 9222409 9223174 9225082 9225467 9227379 9229532 9230016 9230453 9231927 9232411 9232773 9241847 9242619 9243078 9244025 9246175 9247680 9248296 9251352 9252119 9253803 9254270 9256996 9258941 9259201 9260240 9262001 9262631 9262930 9264807 9265132 9266139 9268558     A2M 1
NM_000016   chr1    +   12  76190031    76194085    76198328    76198537    76199212    76200475    76205664    76211490    76215103    76216135    76226806    76228376        76190502    76194173    76198426    76198607    76199313    76200556    76205795    76211599    76215244    76216231    76227055    76229363        ACADM   1

可以看出,如果滚动到行尾,与列出的数字对应的列的数量会有所不同。我要做的是将基因名前的最后一个数字(在本例中是A2M和ACADM)输出到一个文件中。有什么办法吗?我一直在试图找到一种使用unix的awk的方法,但是由于列的数量不同,我认为这种方法行不通

感谢您的帮助


Tags: 文件方法数量基因unix数字选项卡chr1
3条回答

尝试:

awk '{ print $(NF-1) }' FILE

^{}始终提供字段数,因此您可以在awk变量中使用它根据字段长度动态设置字段

你所有的台词都是以同样的方式组织的。如果是这样的话,那就很简单了:

for line in myLines:
    data = line.split[-3]

像这样使用$(NF-1),其中^{}是该行的数字字段:

awk  '{print $(NF-1)}' /tmp/genes.txt
A2M
ACADM

您发布的示例中有空格作为分隔符。如果文件是真正以制表符分隔的,则可能需要将字段分隔符更改为制表符。那就是:

awk  -F $'\t' {print $(NF-1)}' file_name

如果您要在该名称之前输入数字:

$ awk  '{print $(NF-2)}' /tmp/genes.txt
9268558
76229363

相关问题 更多 >