按行值过滤文件

按行值过滤文件

我需要选择第一列中包含特定字符并且第一列中的数字大于特定值的行。

具体来说,我需要选择第一列中包含“G”并具有数字比...更棒50如下所示:

输入文件:

764M    qa11279_TPK0002730_50901083/
762M    qa10589_TPK0002730_50796634/
11G     qa17805_TPK0001664_51330191/
56G     qa15384_TPK0001664_51232746/
140G    qa29996_TPK0000949_51951816/

输出文件:

56G     qa15384_TPK0001664_51232746/
140G    qa29996_TPK0000949_51951816/

答案1

解决方案awk

$ awk -F' ' '$1 ~ /^[0-9]*G/ { sub(/G/, "", $1); if(+$1 > 50) print }' file 
56 qa15384_TPK0001664_51232746/
140 qa29996_TPK0000949_51951816/

答案2

由于“G”仅出现在第一列中,如示例输入所示:

$ awk '/G/ && ($1+0 > 50)' file
56G     qa15384_TPK0001664_51232746/
140G    qa29996_TPK0000949_51951816/

但如果它可能发生在其他领域:

$ awk '($1 ~ /G/) && ($1+0 > 50)' file
56G     qa15384_TPK0001664_51232746/
140G    qa29996_TPK0000949_51951816/

答案3

根据@αГsнιη的评论,但修复了比较:

awk '$1 ~ /^[[:digit:]]+/ && $1 ~ /G$/ && $1+0 > 50' file
56G   qa15384_TPK0001664_51232746/
140G  qa29996_TPK0000949_51951816/

相关内容