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

时间:2015-05-12 16:10:05

标签: python unix awk

我有一个标签分隔文件,如下所示:

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的方法,但是我不相信这会因为列数不同而起作用。

感谢任何帮助

3 个答案:

答案 0 :(得分:2)

使用$(NF-1),因为NF是该行的数字字段:

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

答案 1 :(得分:1)

尝试:

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

NF总是提供字段数,因此您可以在awk变量中使用它来根据字段长度动态设置字段。

答案 2 :(得分:0)

您的所有线条都以相同的方式构建。如果是这样的话非常简单:

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