unix - awk 在数字列上过滤,但仅当其他字符串列等于某个值时
问题描述
我想排除 col1 为“chr6”且 col2 介于 25000000 和 33500000 之间的行
有:
chr1 1000
chr6 24000000
chr6 26000000
chr6 27000000
chr6 40000000
chr7 100000
想:
chr1 1000
chr6 24000000
chr6 40000000
chr7 100000
我觉得它应该是这样的事情的反面,但不知道如何到达那里
awk '$1 = 'chr6 && $2 > 25000000 && $2 < 33500000'
解决方案
您可以使用以下awk
程序。
awk '!($1 == "chr6" && $2 > 25000000 && $2 < 33500000)' Input_file
或者:
awk '($1 == "chr6" && $2 > 25000000 && $2 < 33500000){next} 1' Input_file
OP 尝试中的修复:
- 您正在使用
=
应在此处使用的赋值运算符==
将其作为条件。 - 然后您想排除与条件匹配的结果,因此您需要在
!
此处使用运算符来避免那些实际匹配所有条件的结果。 - 也
'
不允许'
在awk
. - 围绕字符串值进行字符串比较
"
(考虑到它不是变量)。
推荐阅读
- loops - Scilab:无效索引
- proguard - 由于 proguard 规则,生成签名 APK 时出错
- python - Python:excel中不同单元格中的每个元素
- hadoop - Map 可以多次计算出现次数吗?
- security - 在 SPA 中存储 JWT 访问令牌的位置(即 Angular 应用程序)
- c++ - std::find_if 和一个 lambda - 错误 void 值没有被忽略,因为它应该被忽略
- asp.net - 使用 Axios 和 React Native 将 base64 图像上传到服务器
- windows - 如何在 Powershell 的 GetCredential 中传递密码?
- javascript - 与淘汰赛 foreach 的数据绑定不起作用
- vue.js - Bootstrap vue @ok 没有被触发