如何在bash中使用awk提取文件第三列ID值大于1的对应行
解决方案
方法1:数值比较(推荐,兼容性更强)
直接提取ID的数值做大小判断,不管ID是几位数都能正确匹配,逻辑完全贴合「ID值大于1」的需求:
awk '{split($3, arr, /[=;]/)} arr[2] > 1' file.txt > output.txt
逻辑说明:
- 用
split函数把第三列按=和;切割成数组arr,切割后arr[2]就是ID的数值 - 直接判断
arr[2] > 1,符合条件的行就会自动输出
方法2:修改原有正则匹配
如果仅需要临时排除ID=0和ID=1的固定场景,可以直接修改正则的匹配规则,同时匹配0和1:
awk '$3 !~ /^ID=[01];/' file.txt > output.txt
逻辑说明:
- 正则
^ID=[01];可以匹配第三列开头为ID=0;或者ID=1;的内容 - 用
!~排除匹配到的行,剩下的就是符合要求的内容
注意:该方法仅适合ID为个位数的场景,如果存在ID=10、ID=11这类值,正则会误判,优先推荐方法1。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

