使用awk或其他bash脚本在多个列中搜索低于阈值的值

时间:2012-12-18 05:28:21

标签: awk multiple-columns

我想提取某个文件的行,其中特定列的值<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实现此目的

由于

萨姆

1 个答案:

答案 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