查找并排序某些.txt文件中的数据

时间:2017-08-18 19:55:03

标签: shell

我正在处理以下问题:

我必须从一组.txt文件中提取数据。由于这些文件分布在不同的目录中,我使用的是下一个命令:

find -name results.txt | xargs grep "Gion_prom="

它在所有Gion_prom=文件中查找关键字results.txt并返回此信息:

./40/R4_cero_cluster/thermo/results.txt: Gion_prom= -67555.5392 
./50/P1_water_cero/thermo/results.txt: Gion_prom= -73379.3272 
./50/R4_cero_cluster/thermo/results.txt: Gion_prom= -67680.5744 
./5/P1_water_cero/thermo/results.txt: Gion_prom= -73778.5554 
./5/R4_cero_cluster/thermo/results.txt: Gion_prom= -68058.3461 
./60/P1_water_cero/thermo/results.txt: Gion_prom= -73488.4344 
./60/R4_cero_cluster/thermo/results.txt: Gion_prom= -67944.0657 

它运行良好,但我需要打印带有关键字“R4_cero_cluster”的onyl文件,它应该是这样的:

./40/R4_cero_cluster/thermo/results.txt: Gion_prom= -67555.5392 
./50/R4_cero_cluster/thermo/results.txt: Gion_prom= -67680.5744 
./5/R4_cero_cluster/thermo/results.txt: Gion_prom= -68058.3461 
./60/R4_cero_cluster/thermo/results.txt: Gion_prom= -67944.0657 

然后,如果可能,我需要按数字“40”,“50”,“60”等排序。 因此,终端中打印的最终数据应为:

./5/R4_cero_cluster/thermo/results.txt: Gion_prom= -68058.3461     
./40/R4_cero_cluster/thermo/results.txt: Gion_prom= -67555.5392 
./50/R4_cero_cluster/thermo/results.txt: Gion_prom= -67680.5744 
./60/R4_cero_cluster/thermo/results.txt: Gion_prom= -67944.0657 

我知道最后一件事可能是sort函数可以使用,但我是编程的初学者,真的不知道该怎么做。

欢迎任何帮助或建议。

修改

关键字find搜索results.txt个文件。在执行'grep'时,它会在所有results.txt个文件中搜索关键字'Gion_prom'。

我只需要从某些父目录为'R4_cero_cluster'的文件中打印'Gion_prom',以避免来自'R4_cero_cluster'目录的结果。

1 个答案:

答案 0 :(得分:1)

您可以使用-path中的find选项查找匹配路径中的文件,并在sort之后找到grep的管道:

find . -path '*/R4_cero_cluster/*' -name results.txt |
xargs grep 'Gion_prom=' |
sort -t/ -k2,2n