我想提取文件中特定列的值为 <0.05 的行。
例如,如果 $2 或 $4 或 $6 的值 <0.05,那么我想将该行发送到一个新文件。 我不希望任何这些列中的任何行的值 >0.05
cat File_1.txt
S_003 P_003 S_006 P_006 S_008 P_008
74.9 0.006 59.6 0.061 72.2 0.002
96.2 0.003 89.4 0.001 106.9 0.000
105.8 0.003 72.6 0.003 86.7 0.002
45.8 0.726 38.5 0.981 43.9 0.800
50.7 0.305 47.8 0.314 46.6 0.615
49.9 0.366 50.4 0.165 48.2 0.392
42.5 0.920 43.7 0.698 40.3 0.970
46.3 0.684 42.9 0.760 47.7 0.438
192.4 0.001 312.8 0.001 274.3 0.001
我尝试使用 awk 进行此操作,但只能在很长的时间内完成。
awk ' $2<=0.05' file_1.txt > file_2.txt
awk ' $4<=0.05' file_2.txt > file_3.txt
等等,并达到了预期的结果
96.2 0.003 89.4 0.001 106.9 0.000
105.8 0.003 72.6 0.003 86.7 0.002
192.4 0.001 312.8 0.001 274.3 0.001
但是我的文件有 198 列和 57000 行
我还尝试将 awk 命令通过管道连接在一起,但没有成功。它只搜索 $2
awk ' $2<=0.05 || $4=<0.05' File_1.txt > File_2.txt
74.9 0.006 59.6 0.051 72.2 0.002
96.2 0.003 89.4 0.001 106.9 0.000
105.8 0.003 72.6 0.003 86.7 0.002
192.4 0.001 312.8 0.001 274.3 0.001
我在这方面还很陌生,如果有关于如何使用 awk 实现这一点的建议,我将不胜感激
谢谢
山姆
最佳答案
也许这就是您正在寻找的。它将搜索每个偶数列并检查每个列是否包含小于“0.05”的数字:
awk 'NF>1 { for(i=2;i<=NF;i+=2) if ($i>0.05) next }1' File_1.txt
结果:
96.2 0.003 89.4 0.001 106.9 0.000
105.8 0.003 72.6 0.003 86.7 0.002
192.4 0.001 312.8 0.001 274.3 0.001
关于awk - 使用 awk 或其他 bash 脚本在多列中搜索低于阈值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926831/