【问题标题】:Search multiple columns for values below a threshold using awk or other bash script使用 awk 或其他 bash 脚本在多个列中搜索低于阈值的值
【发布时间】:2012-12-18 05:28:20
【问题描述】:

我想提取文件中特定列的值

例如,如果 $2 或 $4 或 $6 的值 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 实现这一点的建议,我将不胜感激

谢谢

山姆

【问题讨论】:

  • I tried this using awk, but it would only work doing it a very long way。您的命令需要多长时间才能完成?
  • 这里有错别字,这行:74.9 0.006 59.6 0.061 72.2 0.002和这行:74.9 0.006 59.6 0.051 72.2 0.002不一样
  • @skwllsp:我认为他的意思是,写出所有可能的组合需要很长时间......
  • 抱歉打错了 - 两者都应该像史蒂夫指出的第一个例子一样阅读

标签: awk multiple-columns


【解决方案1】:

也许这就是你要找的。它将搜索每个偶数列并检查这些列中的每一列是否包含小于“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

【讨论】:

  • 是的。这正是我需要的!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多