gpt4 book ai didi

linux - 将数值结果从单个文本文件分离到 linux 中的多个文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:04 26 4
gpt4 key购买 nike

我有这样的数据

#start
#gatherData
*ELEMENT_SHELL
48709 1 50614 50616 50618 50613
48710 1 50613 50618 50608 50609
48711 1 50616 50617 50619 50618
48712 1 50618 50619 50607 50608
48715 1 50589 50590 50620 50615
48716 1 50615 50620 50616 50614
48717 1 50590 50591 50621 50620
48721 1 50623 50625 50626 50622
48722 1 50622 50626 50610 50611
48723 1 50625 50614 50613 50626
*END
$PresentData
$RESULT OF strength
48709 1.0267261e-002
48710 1.0721873e-002
48711 1.1930415e-002
48712 1.2186395e-002
48715 9.7443219e-003
48716 1.0036242e-002
48717 1.1186538e-002
48721 7.9333931e-003
48722 8.6850608e-003
48723 8.9872172e-003

我想做的是首先检查下的所有结果$力量的结果

第二列中的哪些数字位于 0 和 1e-002 之间,然后根据该搜索 *ELEMENT_SHELL AND *END 之间的数字并将完整行发送到新文本文件 test1.txt。如果数字在 1e-002 到 1e-003 之间,到下一个文本文件 test2.txt 并将这个单个文件分成两个不同的文件。Text1.text 会有

48709       1   50614   50616   50618   50613
48710 1 50613 50618 50608 50609
48711 1 50616 50617 50619 50618
48712 1 50618 50619 50607 50608
48716 1 50615 50620 50616 50614
48717 1 50590 50591 50621 50620

Text2.txt 会有

48721       1   50623   50625   50626   50622
48722 1 50622 50626 50610 50611
48723 1 50625 50614 50613 50626
48715 1 50589 50590 50620 50615

哪位高手能推荐一下SED、AWk的方法吗?我认为最终结果可以很容易地通过管道传输,但是从同一个文件中分离并再次找到它是有问题的。提前致谢

最佳答案

作为基本解决方案,请考虑以下代码:

[hamadhassan $] cat tri.awk
#!/usr/bin/gawk -f

BEGIN{
load_state=1;
}


$0=="$RESULT OF strength"{
# print "end of load state"
load_state=0;
}

load_state==1 && NF==6{
# print "storing "$0
lut[$1]=$0; # store line in look up table:
}

load_state==0 && NF==2{
if($2>0.0 && $2<1e-2){
if($1 in lut){
print lut[$1] > "Text2.txt";
}
}else{
if($1 in lut){
print lut[$1] > "Text1.txt";
}
}

}
[hamadhassan $]

给定您的示例输入:

[hamadhassan $] cat test.in
#start
#gatherData
*ELEMENT_SHELL
48709 1 50614 50616 50618 50613
48710 1 50613 50618 50608 50609
48711 1 50616 50617 50619 50618
48712 1 50618 50619 50607 50608
48715 1 50589 50590 50620 50615
48716 1 50615 50620 50616 50614
48717 1 50590 50591 50621 50620
48721 1 50623 50625 50626 50622
48722 1 50622 50626 50610 50611
48723 1 50625 50614 50613 50626
*END
$PresentData
$RESULT OF strength
48709 1.0267261e-002
48710 1.0721873e-002
48711 1.1930415e-002
48712 1.2186395e-002
48715 9.7443219e-003
48716 1.0036242e-002
48717 1.1186538e-002
48721 7.9333931e-003
48722 8.6850608e-003
48723 8.9872172e-003[hamadhassan $]

给出:

[hamadhassan $] ./tri.awk test.in
[hamadhassan $] cat Text2.txt
48715 1 50589 50590 50620 50615
48721 1 50623 50625 50626 50622
48722 1 50622 50626 50610 50611
48723 1 50625 50614 50613 50626
[hamadhassan $] cat Text1.txt
48709 1 50614 50616 50618 50613
48710 1 50613 50618 50608 50609
48711 1 50616 50617 50619 50618
48712 1 50618 50619 50607 50608
48716 1 50615 50620 50616 50614
48717 1 50590 50591 50621 50620
[hamadhassan $]

这是在带有 awk 3.1.7 的 CentOS 6 上进行的。

关于linux - 将数值结果从单个文本文件分离到 linux 中的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28408929/

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