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

标签 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 实现这一点的建议,我将不胜感激

谢谢

山姆

最佳答案

也许这就是您正在寻找的。它将搜索每个偶数列并检查每个列是否包含小于“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/

相关文章:

c# - 将项目绑定(bind)到 ListBox 多列

css - 高度为 100% 但宽度不是 100% 的 2 列布局

awk - 使用 awk,提取文本文件中列中两个字符串之间的第一个和最后一个数字,然后区分它们?

javascript - Angular ng-网格-从列菜单中隐藏/删除列输入

linux - 需要在 wsdl - grep/awk/sed 上匹配确切的句子

linux - 当我从 Perl 调用时,为什么我的 awk 单行代码不起作用?

MYSQL:复制列但更改类型

string - Gnuplot:使用字符串变量定义列

linux - 将读取行转换为 awk

linux - 从 nginx 日志文件的 IP 地址获取热门网址