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在修复之前,我没有得到任何输出,我不知道你为什么得到每一行。