从文本文件中提取列

2024-10-02 20:35:42 发布

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

我想从一个名为数据.txt基于另一个名为列表.txt. 我需要从数据.txt,如果 1美元和2美元列表.txt提供于数据.txt. 2美元,共列表.txt和4美元数据.txt都是一样的。在

contents of list.txt

2aas   p0877
asds   k9876
651a   kl098

contents of data.txt

2aas    F   DNK_ECTHA   Q9XT6   12-208  192.0   250.0   198.0   104.00  78.80   99.0    108.0   97  5
asds    G   DNK_DROME   k9876   12-209  192.0   250.0   197.0   100.00  78.80   87.0    100.0   97  6
1ot3    H   DNK_DROME   Q9bt6   11-208  142.0   256.0   194.0   106.00  78.80   97.0    100.0   97  5
651a    H   DNK_ECTHA   kl098   10-208  192.0   259.0   197.0   100.00  78.80   98.0    100.0   99  5
2aas    H   pyp_DROME   p0877   12-208  192.0   250.0   130.0   102.00  78.80   67.0    103.0   97  9

desired output

2aas   p0877   67.0
asds   k9876   87.0
651a   kl098   98.0

Tags: of数据txt列表datacontentslistdnk
1条回答
网友
1楼 · 发布于 2024-10-02 20:35:42

我假设data.txt包含您希望使用list.txt中的条目“查询”的数据列表

下面是一个使用python的快速而肮脏的方法:

# Create a data dict using data.txt
with open("data.txt") as f:
  # create generator of entries using non-empty lines in file
  entries = (line.split() for line in f if line.strip())
  # create dict using ($1,$4) as key and $11 as value
  data = dict(((d[0], d[3]), d[10]) for d in entries)

# for each entry in list.txt, print out matching data
with open("list.txt") as f:
  entries = (tuple(line.split()) for line in f if line.strip())
  for e in entries:
    if e in data:
        print e[0], e[1], data[e]

在与文件相同的目录中运行该文件可以获得:

^{pr2}$

或者,对于awk解决方案:

[me@home]$ awk 'FILENAME==ARGV[1] {pair[$1" "$4] = $11; next} ($1" "$2 in pair) {printf("%s\t%s\t%s\n", $1, $2, pair[$1" "$2])}' data.txt list.txt
2aas    p0877   67.0
asds    k9876   87.0
651a    kl098   98.0

相关问题 更多 >