Bash 如何通过避免标题标题来grep列?

Bash 如何通过避免标题标题来grep列?,bash,awk,grep,cut,Bash,Awk,Grep,Cut,我有一个类似这样的输出 ################################################################# # If you used AutoDock Vina in your work, please cite: # # # # O. Trott, A. J. Olson,

我有一个类似这样的输出

#################################################################
# If you used AutoDock Vina in your work, please cite:          #
#                                                               #
# O. Trott, A. J. Olson,                                        #
# AutoDock Vina: improving the speed and accuracy of docking    #
# with a new scoring function, efficient optimization and       #
# multithreading, Journal of Computational Chemistry 31 (2010)  #
# 455-461                                                       #
#                                                               #
# DOI 10.1002/jcc.21334                                         #
#                                                               #
# Please see http://vina.scripps.edu for more information.      #
#################################################################

Detected 4 CPUs
Reading input ... done.
Setting up the scoring function ... done.
Analyzing the binding site ... done.
Using random seed: -1786073016
Performing search ... done.
Refining results ... done.

mode |   affinity | dist from best mode
     | (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
   1        -10.7      0.000      0.000
   2        -10.4      0.460      1.612
   3         -8.6      1.625      6.452
   4         -8.1      1.515      5.404
   5         -8.1      1.569      5.214
   6         -7.9      1.616      6.148
   7         -7.9      1.380      2.324
Writing output ... done.
但我只希望以下内容作为输出

-10.7
-10.4   
-8.6    
-8.1    
-8.1    
-7.9   
-7.9
我试着执行以下命令

grep ' kcal/mol ' ./1/data01/lig2_noch.pdbqt.txt | awk '{print $2}' >>test1.txt

但是没有成功,有谁能给我一个快速修复方法,告诉我如何在这些文件中只获取上面提到的$2数字吗?

测试第一列是否是数字,然后打印第二列

awk '$1 ~ /^[0-9]+$/ {print $2}' ./1/data01/lig2_noch.pdbqt.txt >> test1.txt

测试第一列是否为数字,然后打印第二列

awk '$1 ~ /^[0-9]+$/ {print $2}' ./1/data01/lig2_noch.pdbqt.txt >> test1.txt

尝试:若你们的输出总是一样的,那个么下面的内容可能会在同样的方面帮助你们

awk '/output ... done/{A=""} /^-----/{A=1;next} A{print $2}'   Input_file
正在寻找sting输出。。。完成并将变量a的值设置为NULL。然后再次寻找一个模式,其中一行从------开始,然后将变量a的值设为1。然后提到A意味着检查A的值是否为空,然后打印$2(第二个字段,根据您的要求)。这里提到输入文件

此外,您也可以使用上述方法,或者如果该输出来自于运行脚本,则可以尝试使用:

./your_already_running_script | awk '/output ... done/{A=""} /^-----/{A=1;next} A{print $2}' 

尝试:若你们的输出总是一样的,那个么下面的内容可能会在同样的方面帮助你们

awk '/output ... done/{A=""} /^-----/{A=1;next} A{print $2}'   Input_file
正在寻找sting输出。。。完成并将变量a的值设置为NULL。然后再次寻找一个模式,其中一行从------开始,然后将变量a的值设为1。然后提到A意味着检查A的值是否为空,然后打印$2(第二个字段,根据您的要求)。这里提到输入文件

此外,您也可以使用上述方法,或者如果该输出来自于运行脚本,则可以尝试使用:

./your_already_running_script | awk '/output ... done/{A=""} /^-----/{A=1;next} A{print $2}' 

为什么要使用grep'kcal/mol'?这将只打印标题,而不是跳过标题。为什么要使用
grep'kcal/mol'
?这将只打印标题,而不是跳过标题。我得到了一个输出,如带有多线程的
If#O.AutoDock,455-461#DOI#Please |(kcal/mol)-8.4-8.3-8.0-7.7-7.6-7.2-7.2
我通过使用grep'./1/data01/lig2"noch.pdbqt.txt{awk'-print$2}“>>test1.txt知道如何只获取数字而不获取以前的内容吗?我将
\d
更改为
[0-9]
,因为
awk
不理解常规表达式。现在它适合我了。非常优雅的解决方案@SoumendranathBhakat在修复之前,我没有得到任何输出,我不知道你为什么要得到每一行。我得到了一个输出,像是
If\O.带多线程的自动对接,455-461#DOI#Please |(kcal/mol)-8.4-8.3-8.0-7.7-7.6-7.6-7.2
我通过使用grep'./1/01/txt 2|noch.pdbqt.k获得了相同的输出{print$2}'>>test1.txt知道如何只获取数字而不获取以前的内容吗?我将
\d
更改为
[0-9]
,因为
awk
不理解常规表达式。现在它对我有效。非常优雅的解决方案!@SoumendranathBhakat在修复之前,我没有得到任何输出,我不知道你为什么得到每一行。