我想提取某个文件的行,其中特定列的值<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 :(得分:2)
也许这就是你要找的东西。它将搜索每个偶数编号的列,并检查这些列中的每一列是否包含小于“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