gpt4 book ai didi

python - 根据两列提取行数据

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:01 25 4
gpt4 key购买 nike

我想先说我是一个初学者。

我有两个 txt 文件。一个在两列 (i, j) 中有大约 1000 个值,指的是已经破裂的成对粒子。第二个文件在所有 4M 粒子的列中包含 XYZ 坐标,其中粒子标签(i 或 j)是行号。我需要从文件 1 中获取标签(i 和 j)并找到它们关联的 XYZ 坐标,以便我获得具有以下格式的新文件:

输出:习义子Xj Yj Zj

对于每对 splinter 的粒子。

我不确定使用它的最佳工具是什么。我有一些使用 awk 和 bash 以及 python 的经验,但我没有取得任何进展。

文件 1:

C6i C7j
2084974 2135208
380134 632561
416969 416972
86296 86300
2296040 2343415
493401 562376
444984 522708
405188 536773
84709 130065

文件 2:XYZ 分别是第 3、4 和 5 列。

ni    -0.139703912516E-01 -0.588106472470E-02 -0.246993537185E-01  0.240235100000E-03  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00
al -0.137235866800E-01 -0.641882704213E-02 -0.251673100913E-01 0.534478800000E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.185856021576E-01 -0.152366221623E-01 -0.121702424186E-01 0.243473343750E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.189394000761E-01 -0.152668306704E-01 -0.124951222187E-01 0.247782468750E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.186657676593E-01 -0.149796823498E-01 -0.117824363740E-01 0.245485618750E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.183548072309E-01 -0.146581691495E-01 -0.119760428210E-01 0.262177487500E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
al -0.179781075366E-01 -0.152651341795E-01 -0.118226752981E-01 0.476129550000E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
al -0.184341198964E-01 -0.147587453602E-01 -0.127106194529E-01 0.509758600000E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.162533369485E-01 -0.349146188426E-01 -0.141615273706E-01 0.253299731250E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.163557464187E-01 -0.344963153936E-01 -0.143620570810E-01 0.239937831250E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.166373601765E-01 -0.351914412333E-01 -0.135853527002E-01 0.244891000000E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
al -0.158054048322E-01 -0.352289094572E-01 -0.137329142337E-01 0.462249725000E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.405319274446E-01 -0.296567975721E-01 -0.243386549644E-01 0.254679675000E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
ni -0.409494727711E-01 -0.296234747969E-01 -0.240603258346E-01 0.250886643750E-03 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00

最佳答案

使用awk:

awk 'FNR==NR {xyz[FNR]=$3" "$4" "$5;next;} {print xyz[$1],xyz[$2];}' file2 file

假设 file1 是:

C6i C7j
2 3
6 1

and file2 和你的问题一样,那么:

$ awk 'FNR==NR {xyz[FNR]=$3" "$4" "$5;next;} {print xyz[$1],xyz[$2];}' file2 file1

-0.641882704213E-02 -0.251673100913E-01 0.534478800000E-03 -0.152366221623E-01 -0.121702424186E-01 0.243473343750E-03
-0.146581691495E-01 -0.119760428210E-01 0.262177487500E-03 -0.588106472470E-02 -0.246993537185E-01 0.240235100000E-03

工作原理:

给出了 awk 命令,按顺序给出了两个文件:file2 file1awk 隐式循环遍历文件的每一行。

  • FNR==NR {xyz[FNR]=$3""$4""$5;next;}

    FNR 是到目前为止从当前文件中读取的行数,NR 是到目前为止从所有文件中读取的总行数。因此,当 FNR==NR 时,这意味着我们正在读取命令行中列出的第一个文件。对于该文件,我们将第 3、4、5 列保存到按行号索引的数组 xyz 中。

    next 命令告诉 awk 跳过剩余的命令并跳转到下一行。

  • 打印 xyz[$1],xyz[$2]

    如果我们到达这里,我们正在处理第二个命名文件,file1。我们在数组 xyz 中查找此行命名的两个粒子的坐标,并将它们打印出来。

关于python - 根据两列提取行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com